Listers les handles des fenêtres ouvertes

Résolu
fg85 Messages postés 370 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 13 avril 2007 - 25 oct. 2005 à 21:13
fg85 Messages postés 370 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 13 avril 2007 - 30 oct. 2005 à 12:04
Bonjour,



Je souhaiterai lister (dans une listbox), le titre des fenêtres
actives, avec comme valeur pour chaque ligne le handle de la fenêtre.



Ce qui devrait donner quelque chose comme cela dans la listbox :



-----------------------------

mon application (valeur handle : 10589)

www.google.fr - Mozilla firefox (valeur handle : 984354)

Dossier test ( valeur handle : 9846519874)

-----------------------------


S'il serai possible de faire simple je vous en serai grandement reconnaissant.



Merci d'avance pour vos réponses .



---------------------------------------

6 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
25 oct. 2005 à 21:56
Salut

Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function BringWindowToTop Lib "user32" (ByVal hwnd As Long) As Long
dans un bouton :
Private Sub Command1_Click()
Dim hNoteWnd As Long
Dim x As Long
hNoteWnd = FindWindow("Notepad", "Sans titre - Bloc-notes")
If hNoteWnd = 0 Then
'le notepad avec le titre "Sans titre - Bloc-notes" n'est pas en mémoire
x =Shell("notepad.EXE", vbNormalFocus)
Else
'il est en mémoire : on le force en avant plan
BringWindowToTop (hNoteWnd)
End If
End Sub


Sinon, tu peux utiliser GetWindow pour obtenir la liste de toutes les
fenêtres actives :


dans un module basique :
Public Const GW_HWNDFIRST = 0
Public Const GW_HWNDNEXT = 2
Declare Function GetWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As
Long, ByVal wCmd As Long) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal
hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long


dans un bouton :
Private Sub Command1_Click()
Dim hWndNext As Long
Dim x As Long
Dim lpString As String * 255
Dim vLen As Long


hWndNext = GetWindow(hWnd, GW_HWNDFIRST)
If hWndNext <> 0 Then
vLen = GetWindowText (hWndNext , lpString , len(lpString ))
Debug.print Left(lpString ,vLen )
End If
do until hWndNext = 0
hWndNext = GetWindow(hWndNext, GW_HWNDNEXT)
vLen = GetWindowText (hWndNext , lpString , len(lpString ))
Debug.print Left(lpString ,vLen )
loop
End Sub

Voila un petit debut
APres a toi faire la suite.
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
27 oct. 2005 à 18:43
Au risque de me répéter : Voir ma source nommée Anti-pub : elle fait ce que tu demande !

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
3
fg85 Messages postés 370 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 13 avril 2007
30 oct. 2005 à 12:04
Ben en faite, DarK Sidious, en cherchant dans ta source et en supprimer l'optionnel de l'essentiel, sa fonctione très bien.



Merci beaucou à toi DarK Sidious et à [auteurdetail.aspx?ID=84425 nhervagault], en compilant vos codes, j'ai réussi à créer ce que je voulais. Merci

3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
26 oct. 2005 à 06:41
Voir ma source nommée Anti-Pub

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fg85 Messages postés 370 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 13 avril 2007
27 oct. 2005 à 15:45
Bon j'ai modifié le code comme ceci :

Private Sub Command1_Click()

Dim hWndNext As Long

Dim x As Long

Dim lpString As String * 255

Dim vLen As Long

Dim txt As String



hWndNext = GetWindow(hwnd, GW_HWNDFIRST)

If hWndNext <> 0 Then

vLen = GetWindowText(hWndNext, lpString, Len(lpString))



txt = Left(lpString, vLen)

If txt = "" Then

Else

List1.AddItem txt, 0

End If



End If

Do Until hWndNext = 0

hWndNext = GetWindow(hWndNext, GW_HWNDNEXT)

vLen = GetWindowText(hWndNext, lpString, Len(lpString))

txt = Left(lpString, vLen)

If txt = "" Then

Else

List1.AddItem txt, 0

End If

Loop

End Sub


Maintenant le problème, est que ce code m'affiche une liste avec
plein d'autre chose autre que des fenêtres, or je souhaiterai juste
lister les fenêtres actives. Comment est-ce possible ?



PS : Par fenêtre active, j'entend les fenêtres qu'on peut accéder par la barre de tâches.



-------------------------------
0
fg85 Messages postés 370 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 13 avril 2007
27 oct. 2005 à 19:11
Oui mais je souhaiterai un exemple concret, je débute et je ne comprend rien à votre source :(.
0
Rejoignez-nous