Page 1 sur 1
[R] Boucle de clic sur bouton existant ...
Posté : mer. 29 oct. 2008 21:14
par Yoyo86220
Bonsoir à tous,
Voilà,
Donc j'ai un petit probleme, c'est pour l'automatisation d'installation d'un logiciel... je dois attendre que l'installation doit etre fini pour que je puisse cliquer sur terminer je ne peu pas utilisé winwaitactive car c'est tjrs la mm fenêtre... je voudrai qu'il y est une boucle qui clic tjrs sur le bouton en question jusqua temp qu'il n'existe plus comment fair ?
ou une boucle du style si ce bouton exist cliquer et quitter la boucle temp que le bouton n'existe pas ne pas quitter la boucle...
j'esper que vous m'avez un peu compri merci de m'aider...
Re: [..] Boucle de clic sur bouton existant ...
Posté : mer. 29 oct. 2008 21:44
par sylvanie
Bonsoir,
1) récupérer l'id du bouton en question qui apparaît à la fin via Au3info
2) utiliser une boucle basée sur guictrlgetstate et la constante $GUI_SHOW qui indique si le bouton est visible.
cf un petit exple avec une gui rapide :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 633, 447, 193, 125)
$Button1 = GUICtrlCreateButton("Click Me !!!", 144, 160, 305, 121, 0)
GUICtrlSetState(-1,$GUI_HIDE) ;<---- cache le bouton
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
AdlibEnable("show_button",5000) ;<<--- lance une fonction qui va montrer le bouton dans 5 secondes pour simuler l'install
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
ExitLoop
EndSwitch
Sleep (100)
;<--------- j'utilise cette boucle, comme si on créait la boucle principale d'attente
If BitAND(GUICtrlGetState($Button1),$GUI_SHOW) Then
ControlClick("Form1","",$Button1)
EndIf
WEnd
MsgBox(0,"Fin","on est sortie de la boucle")
Func show_button()
GUICtrlSetState($Button1,$GUI_SHOW)
AdlibDisable()
EndFunc
Re: [..] Boucle de clic sur bouton existant ...
Posté : mer. 29 oct. 2008 22:26
par Yoyo86220
Je ne comprends pas bien l'exemple est t'il possible que vous me montrez avc 2 scripts différent un ou le bouton va aparaitre et l'autre qui doi cliquer sur le bouton dès sont arrivé...
Re: [..] Boucle de clic sur bouton existant ...
Posté : mer. 29 oct. 2008 23:45
par sylvanie
On va procéder autrement car le fait de spliter en 2 programme ne changera pas des masses l'affaire : quelles sont les lignes non comprises ?
Re: [..] Boucle de clic sur bouton existant ...
Posté : mer. 29 oct. 2008 23:50
par Yoyo86220
voila ce que je fais moi...
Code : Tout sélectionner
While 1
If BitAND(GUICtrlGetState(4015),$GUI_SHOW) Then ;<-- 4015 est l'ID du bouton
ControlClick("Adobe Photoshop CS2 - Installation","",4015)
ControlClick("Adobe Photoshop CS2 - Installation","",2003)
Exitloop
EndIf
WEnd
Re: [..] Boucle de clic sur bouton existant ...
Posté : mer. 29 oct. 2008 23:58
par sylvanie
ça a l'air pas mal,
je metterait une tempo, sleep(100) entre les 2 controlclick
si ça ne marche toujours pas, il faudra strocker les retours de guictrlclick pour les consulter après via un msgbox ou un consolewrite :
► Afficher le texte
Code : Tout sélectionner
While 1
If BitAND(GUICtrlGetState(4015),$GUI_SHOW) Then ;<-- 4015 est l'ID du bouton
$ctrl1=ControlClick("Adobe Photoshop CS2 - Installation","",4015)
sleep(100)
$ctrl2=ControlClick("Adobe Photoshop CS2 - Installation","",2003)
Exitloop
EndIf
WEnd
Par contre, tu as bien vérifié que d'un lancement à l'autre de l'exe, photoshop ici, les id des bouton sont toujours les mêmes ?
Re: [..] Boucle de clic sur bouton existant ...
Posté : jeu. 30 oct. 2008 00:06
par Yoyo86220
oui ce sont tjrs les mm... mais il y a un truc qui me chiffonne il n'y a pas besoin de metre le titre de l'apli sur la quel on doit chercher? du mm style que "ControlClick"... ? car là ça ve dire que adméton qu'il est un autre programme d'ouvert avc les mm ID... hum... sa ne marchera point ! non ?
Re: [..] Boucle de clic sur bouton existant ...
Posté : jeu. 30 oct. 2008 00:40
par Yoyo86220
j'ai trouvé une autre solution je pense...
Code : Tout sélectionner
While 1
ControlClick("Adobe Photoshop CS2 - Installation","",4015)
ControlClick("Adobe Photoshop CS2 - Installation","",2003)
If [color=#4000FF]"Adobe Photoshop CS2 - Installation" n'est pas existante[/color] Then Exitloop
WEnd
esque ceci serai possible ?
enfin c'est sur que ça marche apres il me faut juste la commande qui représente ceci :
"Adobe Photoshop CS2 - Installation" n'est pas existante
Re: [..] Boucle de clic sur bouton existant ...
Posté : jeu. 30 oct. 2008 19:16
par sylvanie
Yoyo86220 a écrit :oui ce sont tjrs les mm... mais il y a un truc qui me chiffonne il n'y a pas besoin de metre le titre de l'apli sur la quel on doit chercher? du mm style que "ControlClick"... ? car là ça ve dire que adméton qu'il est un autre programme d'ouvert avc les mm ID... hum... sa ne marchera point ! non ?
Les ID passez ici sont relatifs à une fenêtre. Donc effectivement, plusieurs fenêtres peuvent avoir des contrôles avec même ID, puisque c'est relatif. les Winhandle par contre sont unique, mais comme on ne va pas changer les prototypes des fonctions, le passage du titre de la fenêtre est obligatoire, même si on le résume à "", mais là c'est risqué en terme de résultat
Par contre, que retournent coomme valeur les controleclick (1=ok, 0 = NOK) ? ça nous permettrai de savoir si le click a eu vraiment lieu
Code : Tout sélectionner
If "Adobe Photoshop CS2 - Installation" n'est pas existante Then Exitloop
qu'est est sensé être caché derrière ceci :
- 1 titre de fenêtre
- 1 label dans la fenêtre
- autres ?
Re: [R] Boucle de clic sur bouton existant ...
Posté : ven. 31 oct. 2008 16:08
par BeCool
Je suis débutant, donc pas sur que ça marche (je dis peut être n'apporte quoi), mais as-tu essayé avec:
Code : Tout sélectionner
If Not WinActive ("blablabla") Then WinActivate ("blablabla")
WinWaitActive("blablabla")
Je penses que ça devrait aller.