AirByte
Messages postés13Date d'inscriptionmercredi 5 janvier 2011StatutMembreDernière intervention25 février 2011
-
7 janv. 2011 à 15:29
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 2014
-
10 janv. 2011 à 20:24
Bonjour
J'essaie d'utiliser FindWindowex pour récupérer un handle-enfant d'une fenêtre. Avec certaine fenêtre ça fonctionne mais avec celle qui m'intéresse ça me retourne constamment 0.
Voici mon code
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpclassname As String, ByVal lpclasswindowname As String) As Int32
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Int32, ByVal hWnd2 As Int32, ByVal lpsz1 As String, ByVal lpsz2 As String) As Int32
Private Declare Function GetWindowTextA Lib "user32" (ByVal hWnd As Int32, ByVal lpString As String, ByVal cch As Int32) As Int32
Private Sub Main()
Dim hWndParent As Integer
Dim hWndChild As Integer
' trouve la fenêtre
hWndParent = FindWindow("AfxFrameOrView70u", "Rapports de l'agent")
MsgBox(hWndParent, vbOKOnly, hWndParent)
' trouve le contrôle "AfxWnd70u"
hWndChild = FindWindowEx(hWndParent, 0, "AfxWnd70u", vbNullString)
MsgBox(hWndChild, vbOKOnly, hWndChild)
Et voici les infos récupérer avec un tool de AUTOIT:
On voit bien qu'un no. de Handle est attribué au controle, mais comment le récupéré? Ou est mon erreur? Je récupère bien le HwndParent mais pas le hwndchild.
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20141 10 janv. 2011 à 20:24
Il faudra que tu verifie si la condition d'arrêt est NULL ou le handle du premier enfant trouvé. (Je ne sais pas si ça tourne en boucle ou pas GW_HWNDNEXT).
En fait, tu peux faire comme tu l'entends car je pense que de toutes manières, la recherche sera liée à l'interface étant donné que la classe pourrait être utilisée plusieurs fois dans l'arbre d'une même fenêtre principale.
AirByte
Messages postés13Date d'inscriptionmercredi 5 janvier 2011StatutMembreDernière intervention25 février 2011 10 janv. 2011 à 14:05
Bonjour
Génial, j'ai un résultat. J'ai du faire une petite recherche sur le GetWindows, je ne suis pas très familier avec les APIs.
Mon autre problème maintenant, c'est d'exploiter ce résultat. Cette "Fenêtre Fille" est un genre d'entête de colonne dont je dois récupérer le récupérer le texte.
Je vais travailler la dessus, si tu veux m'en dire plus sur la façon d'utiliser le résultat ou me référer a un bon site ça serait apprécié.
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20141 10 janv. 2011 à 20:11
re,
tu as GW_HWNDNEXT, GW_HWNDPREV, ... Tape le nom de la fonction dans le moteur de recherche et tu auras son fonctionnement.
GetClassName() permettra de retourner le nom de la classe afin de comparer avec celui qui t'interesse.
Dans ce cas, je te conseillerais plutôt de mettre en place EnumChildWindow() pour chaque enfant trouvé car le handle que tu recherche pourrait être n'importe où. Il faut scanner l'arbre des handles.
Il serait dommage de changer le programme à chaque changement de l'interface.