Proprio come altri hanno suggerito, è necessario utilizzare i EnumWindows
e EnumChildWindows
funzioni.
Ecco un link al programma dimostrativo poco ho appena porting da pezzi di codice da un altro programma che avevo scritto in VB6 (molto tempo fa): Windows Scanner
Speranza che aiuta ...
Modifica: Ho appena realizzato che questa non era una grande risposta senza spiegare in realtà come funzionano queste funzioni. Quindi, ecco qui:
La funzione EnumWindows
assume come primo parametro un puntatore a una funzione di richiamata. Il secondo parametro è un valore che è possibile passare alla funzione di callback. Puoi considerarlo come un argomento definito dall'utente.
Ogni volta che EnumWindows
"trova" una nuova finestra, chiamerà la funzione di richiamata per informare sulla nuova finestra. Questa funzione di callback prende come parametri, il gestore della finestra e il parametro opzionale che l'utente ha specificato quando è stato chiamato per la prima volta EnumWindows
.
Quindi, in sostanza, questo è come si chiama EnumWindows
:
EnumWindows(New EnumWindowsProc(AddressOf EnumProc), 0)
Dove EnumWindowsProc
è un delegato utilizzato per creare un riferimento alla funzione EnumProc
, che sarà il nostro richiamata.
La firma di tale richiamo è la seguente:
Private Function EnumProc(hWnd As IntPtr, lParam As IntPtr) As Boolean
E 'all'interno di questa funzione che si popola la matrice interna delle finestre scoperti.
Le cose sono praticamente le stesse per la funzione EnumChildWindows
, con la sola differenza che il suo primo parametro deve essere il gestore della finestra padre. Tutto il resto viene gestito nello stesso modo.
Se si controlla il codice sorgente del programma WindowsScanner
, si vedrà che utilizzo anche lo stesso delegato e la stessa funzione di callback per entrambi EnumWindows
e EnumChildWindows
. Quindi, come faccio a sapere se stiamo enumerando le finestre di primo livello o secondarie? Semplice, ho semplicemente impostato l'ultimo parametro di EnumChildWindows
su "1". Quindi, questo parametro viene passato alla funzione di callback (EnumProc
) che consente di eseguire diverse azioni in base al valore di tale parametro.
Utilizzare EnumChildWindows(). –
grazie :) ci proverò. – famf
Windows o controlli? –