[..] Repérer un CONTROL par un ID couplé à une CLASS

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
reverpi
Niveau 2
Niveau 2
Messages : 18
Enregistré le : mar. 11 janv. 2011 13:28
Status : Hors ligne

[..] Repérer un CONTROL par un ID couplé à une CLASS

#1

Message par reverpi »

Je m'explique, j'ai besoin de retrouver un CONTROL par le couplage de deux de ses propriétés, ID et CLASS.
ATTENTION : Je ne peux pas utiliser INSTANCE et CLASSNN car l'application va évoluer ce qui implique que l'instance changera donc la CLASSNN aussi.

Exemple de mon problème.
J'ai une fenêtre appelons la "A".
"A" contient 4 panneaux "A1","A2","A3","A4" (de CLASS:static)
"A" contient 2 composants "B1","B2" (de CLASS:Static) comme les panneaux.

Propriété de "B2"
"B2" est constitué de 2 composants. "C1" et "C2"
"B2", "C1", "C2" ont le même ID mais une CLASS différente.

"B2" : ID = 1200 ; CLASS = Static ; CLASSNN=Static5
"C1" : ID = 1200 ; CLASS = Edit; CLASSNN=Edit2
"C2" : ID = 1200 ; CLASS = msctls_updown32; CLASSNN=msctls_updown322

Propriété de "B1"
"B1" est constitué de 2 composants. "D1" et "D2"
"B1", "D1", "D2" ont le même ID mais une CLASS différente.

"B1" : ID = 1300 ; CLASS = Static ; CLASSNN=Static4
"D1" : ID = 1300 ; CLASS = Edit; CLASSNN=Edit1
"D2" : ID = 1300 ; CLASS = msctls_updown32; CLASSNN=msctls_updown321

si je fais

Code : Tout sélectionner

Opt('WinTitleMatchMode', 4)

Global $ControlID = "[CLASSNN:Edit2;ID:1300]"
Global $Title = "[CLASS:#32770]"
$_Result = ControlFocus($Title, "OK", $ControlID)
sleep(2000)
$toto = ControlGetHandle($Title,"OK",$ControlID)
MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$toto' & @lf & @lf & 'Return:' & @lf & $toto) ;### Debug MSGBOX
Je rappel que je ne dois pas me servir de CLASSNN mais c'étais une question que je me posais donc pourquoi
le handle retourné est celui de "C1" alors que je l'ai couplé à ID=1300 au lieu de 1200? Ma conclusion est que CLASSNN est prioritaire sur l'ID et que le couplage n'est pas effectif? ( j'ai inversé ID et CLASSNN dans ma variable control ID et c'est CLASSNN qui est toujours pris en compte).

Le but de se post et la vrai question est:
Comment je peux accéder à mon control "C1" ou "C2". Je souhaite le faire grâce au couple CLASS et ID ( ne pas confondre encore une fois CLASS et CLASSNN). Tous mes essais sont restés vain.

Ce que je voulais mais qui ne fonctionne pas c'est :

Code : Tout sélectionner

Opt('WinTitleMatchMode', 4)

Global $ControlID = "[CLASS:Edit;ID:1300]"
Global $Title = "[CLASS:#32770]"
$_Result = ControlFocus($Title, "OK", $ControlID)
sleep(2000)
$toto = ControlGetHandle($Title,"OK",$ControlID)
MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$toto' & @lf & @lf & 'Return:' & @lf & $toto) ;### Debug MSGBOX
Ce code me retourne le HANDLE du composant Static et non celui de EDIT. Le couplage ne fonctionne pas.
J'ai essayé avec REGEXPCLASS pour travailler sur le classname(CLASSNN) mais le couplage avec ClassNN et ID ne fonctionne pas non plus.

j'attends vos réponse avec impatience. ( un petit schéma des "A" , "B" et "C" et "D" est rapide à faire pour une compréhension plus aisé). :)
Répondre