Page 1 sur 1

[Ex] Liste des contrôles dans une fenêtre donnée

Posté : ven. 23 nov. 2012 22:24
par jguinch
Bonsoir
Récemment, j'ai eu besoin pour un script de lister tous les contrôles présents dans une ou plusieurs fenêtre afin de récupérer des informations (ID, Instance, taille, emplacement ....).

Voici donc le résultat :
► Afficher le texte

Re: [Ex] Liste des contrôles dans une fenêtre donnée

Posté : ven. 23 nov. 2012 22:39
par mikell
Sujet déplacé dans les exemples de script (évidemment)

Sympa ce script Image

Re: [Ex] Liste des contrôles dans une fenêtre donnée

Posté : sam. 24 nov. 2012 21:12
par jguinch
Petite mise à jour (dans le premier post) :
Ajout de la position RELATIVE PAR RAPPORT A L'ECRAN...
Intéressant si on veut placer la souris sur en contrôle en particulier....

Re: [Ex] Liste des contrôles dans une fenêtre donnée

Posté : mar. 04 déc. 2012 11:50
par scorp84
Script vraiment excellent :-)

Merci +++ à Jguinchard.

Amicalement.

BM

Re: [Ex] Liste des contrôles dans une fenêtre donnée

Posté : mar. 13 mai 2014 00:14
par jguinch
Je suis retombé sur ce post (ça fait pas mal), qui avait quelques petits problèmes.
J'en ai profité pour tout revoir.

Re: [Ex] Liste des contrôles dans une fenêtre donnée

Posté : mar. 13 mai 2014 09:29
par TommyDDR
warning: $rand: possibly used before declaration.
warning: $winList: possibly used before declaration.

Re: [Ex] Liste des contrôles dans une fenêtre donnée

Posté : mar. 13 mai 2014 09:53
par jguinch
Arf, embrouille dans le copié-collé... C'est corrigé, merci Tommy.

Re: [Ex] Liste des contrôles dans une fenêtre donnée

Posté : mar. 13 mai 2014 11:04
par TommyDDR
Pas de problème, merci à toi pour ce script (qui date mais que je n'avais pas vu ^^)

Re: [Ex] Liste des contrôles dans une fenêtre donnée

Posté : dim. 18 mai 2014 19:05
par walkson
Bonsoir,
Un petit mot pour dire que je viens d'essayer le scripte et il est génial
Beaucoup plus complet que Autoit window info
Un grand merci à jguinch

Re: [Ex] Liste des contrôles dans une fenêtre donnée

Posté : mar. 22 juil. 2014 21:22
par jguinch
Petite mise à jour (encore).
Correction d'un bug : prise en compte des classes dont le nom contient des caractères spéciaux (#1234 par ex).

Re: [Ex] Liste des contrôles dans une fenêtre donnée

Posté : lun. 04 sept. 2017 18:16
par thoms
Bonjour jguinch, le forum,
Le sujet est un peu vieux mais intéressant, la preuve.
Est-il possible de retrouver le nom du contrôle par son ID ou son handle ?
J'ai une quinzaine de boutons que j'active ou désactive à la demande, mais certains comportent le même texte et je voudrais les identifier à coup sûr.
Par exemple :

Code : Tout sélectionner

$btnOption1 = GUICtrlCreateButton("Pulse", 10, 10, 75, 30)
$btnOption2 = GUICtrlCreateButton("Pulse", 10, 95, 75, 30)
Avec _WinGetControlList, j'obtiens l'ID, soit la valeur des $btnOptionx. Je voudrais les noms, $btnOption1 et $btnOption2.
C'est peut-être simple et très évident, mais je ne trouve pas.

Un coup de main ? Merci d'avance,
Thoms

Re: [Ex] Liste des contrôles dans une fenêtre donnée

Posté : lun. 04 sept. 2017 23:02
par walkson
Bonjour,
Le code de jguinch est surtout utile pour retrouver les ID d'une gui autre que Autoit et il retourne les valeurs
Un exemple avec le programme Veracrypt
Row|CLASS|ClassnameNN|Advanced Mode|Handle|Text|ID|Position in window|Size|Position in screen|Visible
[0]|SysListView32|SysListView321|[CLASS:SysListView32; INSTANCE:1]|0x00050470||1007|X=12 ; Y=8|W=540 ; H=219||1
[1]|SysHeader32|SysHeader321|[CLASS:SysHeader32; INSTANCE:1]|0x07A702FA||0|X=14 ; Y=10|W=519 ; H=24||1
[2]|ComboBox|ComboBox1|[CLASS:ComboBox; INSTANCE:1]|0x000503BE||1034|X=84 ; Y=312|W=318 ; H=21||1
[3]|Edit|Edit1|[CLASS:Edit; INSTANCE:1]|0x0005042A||1001|X=87 ; Y=315|W=295 ; H=15||1
[4]|Button|Button1|[CLASS:Button; INSTANCE:1]|0x000903D0|Créer un volume|1038|X=24 ; Y=258|W=126 ; H=23|X=0 ;  Y=1040|1
[5]|Button|Button2|[CLASS:Button; INSTANCE:2]|0x000A042C|&Propriétés du volume|1045|X=219 ; Y=258|W=126 ; H=23||1
[6]|Button|Button3|[CLASS:Button; INSTANCE:3]|0x000703E0|&Vider le cache|1040|X=414 ; Y=258|W=126 ; H=23||1
[7]|Button|Button4|[CLASS:Button; INSTANCE:4]|0x1DEB034E|&Ne jamais enregistrer l'historique|1006|X=84 ; Y=346|W=183 ; H=16||1
[8]|Button|Button5|[CLASS:Button; INSTANCE:5]|0x0005018C|&Outils pour le volume|1039|X=276 ; Y=343|W=126 ; H=23||1
[9]|Button|Button6|[CLASS:Button; INSTANCE:6]|0x000603C0|&Fichier...|1043|X=414 ; Y=312|W=126 ; H=23||1
[10]|Button|Button7|[CLASS:Button; INSTANCE:7]|0x00060436|&Périphérique...|1037|X=414 ; Y=343|W=126 ; H=23||1
[11]|Button|Button8|[CLASS:Button; INSTANCE:8]|0x00270326|&Monter|1|X=12 ; Y=395|W=126 ; H=29||1
[12]|Button|Button9|[CLASS:Button; INSTANCE:9]|0x027402EE|Montage &automatique|1041|X=150 ; Y=395|W=126 ; H=29||1
[13]|Button|Button10|[CLASS:Button; INSTANCE:10]|0x00050438|&Tout démonter|1065|X=288 ; Y=395|W=126 ; H=29||1
[14]|Button|Button11|[CLASS:Button; INSTANCE:11]|0x0159027A|&Quitter|1062|X=426 ; Y=395|W=126 ; H=29||1
[15]|Button|Button12|[CLASS:Button; INSTANCE:12]|0x00050432|Volume|1051|X=12 ; Y=291|W=540 ; H=86||1
[16]|Static|Static1|[CLASS:Static; INSTANCE:1]|0x0048036C||1098|X=20 ; Y=309|W=52 ; H=52||1
[17]|Static|Static2|[CLASS:Static; INSTANCE:2]|0x00070422||-1|X=3 ; Y=0|W=558 ; H=239||1
[18]|Static|Static3|[CLASS:Static; INSTANCE:3]|0x000D042E||-1|X=423 ; Y=393|W=132 ; H=33||1
[19]|Static|Static4|[CLASS:Static; INSTANCE:4]|0x000703DE||-1|X=285 ; Y=393|W=132 ; H=33||1
[20]|Static|Static5|[CLASS:Static; INSTANCE:5]|0x00080424||-1|X=9 ; Y=393|W=132 ; H=33||1
[21]|Static|Static6|[CLASS:Static; INSTANCE:6]|0x000803E4||-1|X=147 ; Y=393|W=132 ; H=33||1
[22]|Static|Static7|[CLASS:Static; INSTANCE:7]|0x0004046E||-1|X=3 ; Y=245|W=558 ; H=193||1
Tous les valeurs des Buttons sont retournées (en principe)

Sur une gui Autoit, il faut utiliser GuiCtrlRead($btnOption1)

Re: [Ex] Liste des contrôles dans une fenêtre donnée

Posté : mar. 05 sept. 2017 22:53
par thoms
@walkson

Merci, mais j'avais globalement compris l'utilité du code. Même si je n'arrive pas à retrouver les contrôles d'une userform de VBA/Excel.

GUICtrlRead me renvoie le texte du bouton, soit 2 fois "Pulse" dans mon cas. Ce qui ne me permet pas d'identifier à coup sûr mon contrôle. J'ai 5 boutons dont le texte est "Pulse" !

Je pense créer un scripting.dictionary à la création des contrôles comportant les ID et names. Peu pratique, mais sans doute efficace.

Merci,
Thoms

Re: [Ex] Liste des contrôles dans une fenêtre donnée

Posté : jeu. 07 sept. 2017 07:49
par mikell
thoms a écrit : mar. 05 sept. 2017 22:53Je pense créer un scripting.dictionary à la création des contrôles comportant les ID et names. Peu pratique, mais sans doute efficace.
Et surtout incontournable
Ce que walkson a probablement voulu dire, c'est que le script de jguinch fournit les infos Windows sur les controles, alors que leurs "noms" sont des variables internes à ton code qui représentent l'ID des controles. En fait le script est donc relativement inutile en usage interne, toutes les infos qu'il est susceptible de fournir étant en principe déjà définies dans le code
scripting.dictionary ou array peu importe mais il te faudra effectivement faire ça à la création des controles (et peut-être travailler avec Eval ?)
J'avoue ne pas trop comprendre l'intérêt de la chose mais bon je ne suis pas dans le code :mrgreen:

Re: [Ex] Liste des contrôles dans une fenêtre donnée

Posté : ven. 08 sept. 2017 17:50
par thoms
Bonjour mikell, le forum,

J'ai essayé en array et en dictionary. Les deux vont bien.
Comme tu dis :
J'avoue ne pas trop comprendre l'intérêt de la chose mais bon je ne suis pas dans le code
À l'usage, j'ai vu que ça ne servait à rien !
Bon, tant pis ! Ça m'a permis de revoir le fonctionnement du dictionary.
Merci, Thoms