Newsgroup: it.comp.lang.visual-basic
Titolo: FindWindow e nome parziale della finestra.

Ciao a tutti.
E' possibile trovare una finestra attiva tramite FindWindow ma conoscendo
solo la parte iniziale del titolo della finestra?
Io vorrei controllare se un'istanza precedente della mia applicazione è già
attiva e nel caso scaricare quella attuale ed attivare la precedente.
Il problema è che la caption del form principale dell'applicazione cambia
perchè riporta, dopo il nome del programma, anche i dati dell'utente e del
database aperto in quel momento.
Ho provato con FindWindow per altre applicazioni, ma ho visto che trova solo
le finestre che hanno il caption esatto che passo.
In questo caso conosco solo la prima parte del titolo, che è il nome
dell'applicazione.
Grazie.
Ciao
Skysurfer

 solo la parte iniziale del titolo della finestra?
Iouri lo fa cosě:
You can find window by part of it caption, using wild cards
'---Bas module code------
Private Declare Function EnumWindows& Lib "user32" (ByVal lpEnumFunc As
Long, ByVal lParam As Long)
Private Declare Function GetWindowText Lib "user32" Alias
"GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal
cch As Long) As Long
Private Declare Function IsWindowVisible& Lib "user32" (ByVal hwnd As
Long)
Private Declare Function GetParent& Lib "user32" (ByVal hwnd As Long)
Dim sPattern As String, hFind As Long
Function EnumWinProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim k As Long, sName As String
If IsWindowVisible(hwnd) And GetParent(hwnd) = 0 Then
   sName = Space$(128)
   k = GetWindowText(hwnd, sName, 128)
   If k > 0 Then
     sName = Left$(sName, k)
     If lParam = 0 Then sName = UCase(sName)
     If sName Like sPattern Then
       hFind = hwnd
       EnumWinProc = 0
       Exit Function
     End If
   End If
End If
EnumWinProc = 1
End Function
Public Function FindWindowWild(sWild As String, Optional bMatchCase As
Boolean = True) As Long
 sPattern = sWild
 If Not bMatchCase Then sPattern = UCase(sPattern)
 EnumWindows AddressOf EnumWinProc, bMatchCase
 FindWindowWild = hFind
End Function
'----Using (Form code)----
Private Sub Command1_Click()
  Debug.Print FindWindowWild("*Mi??OSoFt In[s-u]ernet*", False)
End Sub
Iouri Boutchkine
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 attiva e nel caso scaricare quella attuale ed attivare la precedente.
Sub Main
    If App.PrevInstance Then
        AppActivate App.Title
        Exit sub
    End if
End Sub
A volte ci si scorda che VB è meglio di quanto sembri :)
Ciao
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net


Ah.. questa soluzione mi piaceva... peccato che non posso massimizzare la
finestra e che comunque mi sembra che attivi l'applicazione che vuole lui.
Nel senso che la seconda sessione sessione viene chiusa, ma non mi viene
riattivata la prima. Anche questo può dipendere dal caption del form?
Ciao.
Grazie.

 riattivata la prima. Anche questo può dipendere dal caption del form?
Dipende _solo_ dal Caption (Title) del form...

 ha scritto nel messaggio
news:b34m0s$1iqm8e$1...@ID-174464.news.dfncis.de...

Ok, quindi questa soluzione non va bene nel mio caso, perchè come spiegavo
nel primo post, non conosco a priori la caption del form.
Devo usare la prima soluzione che mi ha indicato Cesare, anche se ho appena
provato ad inserirla in una mia DLL e mi ha dato un bel "La memoria non
poteva essere written"... adesso ci riprovo.
Grazie a tutti.
Skysurfer

 poteva essere written"... adesso ci riprovo.
Vedi appActivate sulla guida: Per "title" puoi anche passare l'ID fornito
dalla Shell...

 Skysurfer
'***********************************
Beg your pardon!
Ho riguardato il postato e mi sono accorto che le api sono dichiarate
male.
es:
EnumWindows& 
cambia le dichiarazioni in questo modo:
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long,
ByVal lParam As Long) As Boolean
Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) as
Long
Declare Function GetParent Lib "user32" Alias "GetParent" (ByVal hwnd As
Long) As Long


 nel primo post, non conosco a priori la caption del form.
AppActivate attiva il form che ha la Caption che *inizia* per il testo
passato.
Basta leggere la guida >:)
Ciao