MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 2009
-
18 juil. 2006 à 22:35
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 2009
-
19 juil. 2006 à 18:12
Bonjour à tous,
J'y comprend rien, ça m'échappe vraiment la. J'ai le code suivant :
CurrWnd = GetDesktopWindow()
CurrWnd = GetWindow(CurrWnd, GW_HWNDFIRST)
Avec bien sur les API GetDesktopWindow et GetWindow déclarée, et GW_HWNDFIRST=0
GetDesktopWindow me renvoie bien le handle du bureau (du moins ça me renvoie pas 0, en l'occurence la c'est 65556)
Et GetWindow derrière ça me renvoie 0...
pourtant bien sur j'ai des fenetres, d'ailleurs en utilisant le handle d'une form vb ça marche...
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 18 juil. 2006 à 23:03
Bonsoir,
Ci-dessous, un script, en VB6, qui n'est pas de moi (glané-recherché sur ce Forum sous le nom de "remove").
N'ayant, pas VB6, il n'est pas testé. J'essaye de l'adapter en vbs, via excel et wmi.
Il devrait répondre à la question. Il est bien détaillé.
Private GetWindow("Lib "user32" (ByVal hWnd, ByVal wCmd)")
Private GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd, ByVal lpString, ByVal cch)
Private Declare IsWindowVisible Lib "user32" (ByVal hWnd) 'As Long
Private Declare GetDesktopWindow (Lib "user32")' ())' As Long
Dim hWnd
Dim Titre_Fenetre
Dim TitreFen
Dim j
hWnd = GetWindow(GetDesktopWindow(), 5)
Do While (Not IsNull(hWnd)) And (hWnd <> 0) 'Passe en revue chaque fenêtre
Titre_Fenetre = String(255, 0) 'Formate la chaine destinée à accueillir le titre de la fenêtre
ret = GetWindowText(hWnd, Titre_Fenetre, 255) 'récupère le titre de la fenêtre et le nombre de caractères de ce titre
If Titre_Fenetre <> String(255, 0) Then 'Si le titre n'est pas vide
If IsWindowVisible(hWnd) = 1 Then 'Pour ne tenir compte que des fenêtres visibles (regardez ce que ça donne en retirant cette condition)
TitreFen = Titre_Fenetre 'récupère le titre de la fenêtre
TitreFen = Left(TitreFen, ret) 'sans les caractères supplémentaires finaux
j = j + 1
If Val(j) < 10 Then j = "0" & j
List.AddItem TitreFen & " [ " & hWnd & " ]" 'stocke le tout dans une listbox
End If
End If
hWnd = GetWindow(hWnd, 2) 'cherche la fenêtre suivant
Loop
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 18 juil. 2006 à 23:17
salut
MadM@tt -> je ne vois pas ce que tu veux faire... du moins pas comme çà. il faudrait utiliser EnumChildWindows non?!
sinon après quelques modifs mineures, le code posté par JMO semble presque fonctionnel (résultat pas exaustif)
en syntaxe complète VB6 çà donne :
'mettre une "List" (listbox)
Option Explicit
'
Private Const GW_HWNDFIRST As Long = 0&
Private Const GW_OWNER = 4
'
Private Declare Function GetWindow Lib "user32" _
(ByVal hWnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function IsWindowVisible Lib "user32" _
(ByVal hWnd As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
(ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
'
Dim lhWnd As Long
Dim Titre_Fenetre As String
Dim TitreFen As String
Dim j As Long
'
Private Sub Form_Load()
' Dim CurrWnd As Long
' CurrWnd = GetDesktopWindow()
' CurrWnd = GetWindow(CurrWnd, GW_HWNDFIRST)
' Unload Me
Call test
End Sub
'
'
Sub test()
Dim ret As Long
lhWnd = GetWindow(GetDesktopWindow(), 5)
Do While Not IsNull(lhWnd)) And (lhWnd <> 0) 'Passe en revue chaque fenêtre
Titre_Fenetre = String (255, 0) 'Formate la chaine destinée à accueillir le titre de la fenêtre
ret = GetWindowText(lhWnd, Titre_Fenetre, 255) 'récupère le titre de la fenêtre et le nombre de caractères de ce titre
If Titre_Fenetre <> String(255, 0) Then 'Si le titre n'est pas vide
If IsWindowVisible(lhWnd) = 1 Then 'Pour ne tenir compte que des fenêtres visibles (regardez ce que ça donne en retirant cette condition)
TitreFen = Titre_Fenetre 'récupère le titre de la fenêtre
TitreFen = Left (TitreFen, ret) 'sans les caractères supplémentaires finaux
j = j + 1
If Val(j) < 10 Then j = "0" & j
List.AddItem TitreFen & " [ " & lhWnd & " ]" 'stocke le tout dans une listbox
End If
End If
lhWnd = GetWindow(lhWnd, 2) 'cherche la fenêtre suivant
Loop
End Sub
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 18 juil. 2006 à 23:28
Bonsoir,
Je viens de rechercher l'original (en vb6) sur mes postes at home et at job,
que nenni !!! Désolé, j'avais commencé à enler toutes des déclarations (as long...)
PCPT, merci de ta gratitude. !!!!!..
jean-marc
Vous n’avez pas trouvé la réponse que vous recherchez ?
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 19 juil. 2006 à 17:01
Hello, merci à vous deux,
Le code que vous m'avez passé marche, nickel c'est ce qu'il me fallait. Simplement en fait tout ce que je veux faire, c'est lister toutes les fenetres... basique quoi.
Mais l'api GetWindow a besoin d'un handle pour trouver la première fenetre. ça peut marche sans se casser le crane avec un truc du style :
lhWnd = GetWindow(Form1.hwnd, GW_HWNDFIRST)
Simplement moi mon but c'est de faire un module que je pourrais charger dans plein de prog sans que ça dépende des mes objets, donc je n'ai pas de fenetre dispo pour trouver un handle.
Je pensais donc (comme je l'avais vu une fois sur le site), utiliser le handle du bureau avec GetDesktopWindow...
Mais ça marche pas comme ça :
lhWnd = GetWindow(GetDesktopWindow(), GW_HWNDFIRST) (GW_HWNDFIRST=0)
en revanche ce que vous m'avez passé marche :
lhWnd = GetWindow(GetDesktopWindow, 5)
Alors j'ai plus que 2 questions promis après c'est fini lol:
A quoi correspond le 5 (à quelle constante en gros) ??
Et est ce que ça va bien me lister toutes le fenetres de windows sans exception ?
Merci beaucoup pour vos réponses, enfin un truc qui marche ! (mais j'aimerais comprendre pourquoi ça marche )
Ciaò
[mailto:madmatt_12@msn.com MadMatt]
www.madmatt.fr.st
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 19 juil. 2006 à 18:12
Excellent la liste de toutes les constantes, merci. Sinon je vais regarder d'un peu plus près en testant, voir si la liste est complète (mais vu le mot clé : GW_MAX, ça a l'air d'etre bon).