[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 : 2511
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 »

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 15:23, modifié 2 fois.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#2

Message par mikell »

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 : 2511
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 »

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 : 400
Enregistré le : mar. 04 nov. 2008 21:51
Localisation : Avignon, France
Status : Hors ligne

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

#4

Message par scorp84 »

Script vraiment excellent :-)

Merci +++ à Jguinchard.

Amicalement.

BM
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
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 »

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 : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#6

Message par TommyDDR »

warning: $rand: possibly used before declaration.
warning: $winList: possibly used before declaration.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
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 »

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 : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

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

#8

Message par TommyDDR »

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 : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

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

#9

Message 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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
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 »

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 17:58
Status : Hors ligne

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

#11

Message 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
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

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

#12

Message 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)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
thoms
Niveau 1
Niveau 1
Messages : 3
Enregistré le : lun. 04 sept. 2017 17:58
Status : Hors ligne

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

#13

Message 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
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#14

Message 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:
" 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 17:58
Status : Hors ligne

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

#15

Message 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
Répondre