Handle d'un controle
Handle d'un controle
Voici mon problême.
Sur une fenetre d'un programme existant , je voudrais pouvoir récupérer le type des controles et leur Handle. Quelqu'un sait-il comment faire ?
Merci par avance
Sur une fenetre d'un programme existant , je voudrais pouvoir récupérer le type des controles et leur Handle. Quelqu'un sait-il comment faire ?
Merci par avance
Code : Tout sélectionner
; By Nico
Global HandleEdit
Procedure EnumChildProc(hWnd.l,lParam.s)
Tampon.s=Space(50)
GetClassName_(hWnd, @Tampon, 50)
Debug "hwnd="+Str(hWnd)+" "+"ClassName="+Tampon
If Tampon="Edit"
Tampon1.s=Space(20)
SendMessage_(hWnd,#WM_GETTEXT,20,Tampon1)
;On vérifie que le contenu de l'edit correspond à chemin(lparam)
If lParam=Tampon1
HandleEdit=hWnd
EndIf
EndIf
ProcedureReturn #True
EndProcedure
Chemin.s="C:\"
WindowExploreur = RunProgram("explorer.exe", "/n,/e,"+Chemin+Chr(34), "")
Delay(1000)
FenetreActive.l=GetForegroundWindow_()
EnumChildWindows_(FenetreActive, @EnumChildProc(),Chemin)
Chemin1.s="Poste de travail"
SendMessage_(HandleEdit,#WM_SETTEXT,0,Chemin1)
SendMessage_(HandleEdit,#WM_KEYDOWN,#VK_RETURN,0)
Delay(1000)
Tampon.s=Space(50)
SendMessage_(HandleEdit,#WM_GETTEXT,50,Tampon)
Debug FenetreActive
If Chemin1=Tampon
MessageRequester("Info","L'Edit a bien reçu Le chemin spécifié!")
EndIf
End
Je vais t'expliquer ce qui a motivé ma demande.
Sur un programme de gestion je dois lire le contenu d'un champ LISTBOX identifié sous le nom "ListBox1", j'ai utilisé des fonctions d'api qui me permette d'extraire le texte mais au lieu d'extraire le texte j'ai eu une chaine de caractére de 4 carctéres supérieure au code ascii 128 alors que la même fonction utilisé sur un listbox classique retourne bien le contenu de l'item.
La seule différence réside dans mon cas dans le fait que l'item est composé de plusieurs zones séparé par des tab
Aurait-tu une idée qui me depannerait ?
Merci par avance
Sur un programme de gestion je dois lire le contenu d'un champ LISTBOX identifié sous le nom "ListBox1", j'ai utilisé des fonctions d'api qui me permette d'extraire le texte mais au lieu d'extraire le texte j'ai eu une chaine de caractére de 4 carctéres supérieure au code ascii 128 alors que la même fonction utilisé sur un listbox classique retourne bien le contenu de l'item.
La seule différence réside dans mon cas dans le fait que l'item est composé de plusieurs zones séparé par des tab
Aurait-tu une idée qui me depannerait ?
Merci par avance
Tiens un code qui fonctionne:
Code : Tout sélectionner
; By Nico
Global Tampon1.s
Procedure.l EnumChildProc(hWnd.l,lParam.l)
Tampon.s=Space(50)
GetClassName_(hWnd, @Tampon, 50)
Debug "hwnd="+Str(hWnd)+" "+"ClassName="+Tampon
If Tampon="ListBox"
Nb_Octets = SendMessage_( hWnd, #LB_GETTEXTLEN, lParam , 0 )
Tampon1.s=Space(Nb_Octets)
SendMessage_( hWnd, #LB_GETTEXT, lParam, Tampon1 )
r=1
EndIf
ProcedureReturn r
EndProcedure
; Classe et Nom de la fenêtre contenant la ListBox
; Attention, cette fenêtre, je l'ai créé pour les Tests
Fenetre.l=FindWindow_("WindowClass_0","Pure Basic")
Debug Fenetre
Numero_de_ligne=0
If EnumChildWindows_(Fenetre, @EnumChildProc(), Numero_de_ligne)
MessageRequester("Info", Tampon1)
EndIf
End
Avec une LISTBOX classique ta fonction marche parfaitement, je ne comprends pas pourqoui elle ne marche pas avec mon programme.
J'elets une hypothése penses-tu que cette série de quatre chiffres puise être une adresse mémoire dans laquelle le résultat serait copié ? car cette listbox dans sa présentation malgré que la classname soit ListBox ressemble plutôt à une Listview ?
Merci de ton aide
J'elets une hypothése penses-tu que cette série de quatre chiffres puise être une adresse mémoire dans laquelle le résultat serait copié ? car cette listbox dans sa présentation malgré que la classname soit ListBox ressemble plutôt à une Listview ?
Merci de ton aide