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

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2469
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

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

#1

Message par jguinch » ven. 23 nov. 2012 22:24

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
Modifié en dernier par jguinch le ven. 19 juil. 2013 14:23, modifié 2 fois.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5814
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#2

Message par mikell » ven. 23 nov. 2012 22:39

Sujet déplacé dans les exemples de script (évidemment)

Sympa ce script Image
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2469
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

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

#3

Message par jguinch » sam. 24 nov. 2012 21:12

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....
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

Avatar du membre
scorp84
Niveau 7
Niveau 7
Messages : 339
Enregistré le : mar. 04 nov. 2008 21:51
Localisation : Avignon
Contact :
Status : Hors ligne

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

#4

Message par scorp84 » mar. 04 déc. 2012 11:50

Script vraiment excellent :-)

Merci +++ à Jguinchard.

Amicalement.

BM

Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2469
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

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

#5

Message par jguinch » lun. 12 mai 2014 23:14

Je suis retombé sur ce post (ça fait pas mal), qui avait quelques petits problèmes.
J'en ai profité pour tout revoir.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1784
Enregistré le : mar. 22 juil. 2008 20:55
Localisation : Nantes
Status : Hors ligne

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

#6

Message par TommyDDR » mar. 13 mai 2014 08:29

warning: $rand: possibly used before declaration.
warning: $winList: possibly used before declaration.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2469
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

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

#7

Message par jguinch » mar. 13 mai 2014 08:53

Arf, embrouille dans le copié-collé... C'est corrigé, merci Tommy.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1784
Enregistré le : mar. 22 juil. 2008 20:55
Localisation : Nantes
Status : Hors ligne

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

#8

Message par TommyDDR » mar. 13 mai 2014 10:04

Pas de problème, merci à toi pour ce script (qui date mais que je n'avais pas vu ^^)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 654
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

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

#9

Message par walkson » dim. 18 mai 2014 18:05

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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi

Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2469
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

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

#10

Message par jguinch » mar. 22 juil. 2014 20:22

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).
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

thoms
Niveau 1
Niveau 1
Messages : 3
Enregistré le : lun. 04 sept. 2017 16:58
Status : Hors ligne

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

#11

Message par thoms » lun. 04 sept. 2017 17:16

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

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 654
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

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

#12

Message par walkson » lun. 04 sept. 2017 22:02

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)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi

thoms
Niveau 1
Niveau 1
Messages : 3
Enregistré le : lun. 04 sept. 2017 16:58
Status : Hors ligne

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

#13

Message par thoms » mar. 05 sept. 2017 21:53

@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

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5814
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#14

Message par mikell » jeu. 07 sept. 2017 06:49

thoms a écrit :
mar. 05 sept. 2017 21:53
Je 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:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

thoms
Niveau 1
Niveau 1
Messages : 3
Enregistré le : lun. 04 sept. 2017 16:58
Status : Hors ligne

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

#15

Message par thoms » ven. 08 sept. 2017 16:50

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

Répondre