Page 1 sur 1
[R] Abonner le script a un événement.
Posté : jeu. 17 avr. 2008 19:55
par fred
Bonjour a tous,
une petite question...
j'ai vu que la détection de certaines touches claviers est possible....qu'il y a une sorte" d'abonnement" a ces événement ( en début de script)...
voici ma question :
comment faire pour déclarer un abonnement a un évènement ( ici l'ouverture d'une fenetre) dans un script..
exemple : le script tourne, des que une fenetre apaprait, il y a appel d'une methode qui fait une insertion ds le fichier log, puis il continu...sachant que les fenetres apparaissent a différente steppe...pas toujours ds le meme ordre.....
est il possible de faire le script qui s'execute normalement..et une fonction qui est apelle des que la fenêtre erreur s'affiche par exemple.?
merci par avance de vos réponses...
Re: [..] Abonner le script a un événement.
Posté : dim. 20 avr. 2008 17:22
par Firefox2
Salut !
Dans ton 1er cas, tu peux faire quelque chose du genre:
Code : Tout sélectionner
Global $liste = WinList()
Global $tmp
While Sleep(20)
$tmp = WinList()
If $liste[0][0] <> $tmp[0][0] Then
NouvelleFenetre()
$liste = WinList()
EndIf
WEnd
Func NouvelleFenetre()
MsgBox(0, "AutoIt", "Le script a détecté un changement du nombre de fenêtres !")
EndFunc
Mais ce code génère des fausses alertes car certaines fenêtres ne sont pas visibles mais elle sont détectées par WinList()
Pour le 2eme cas, c'est plutôt quelque chose comme ça:
Code : Tout sélectionner
While Sleep(20)
If WinExists("nom 1") Then Fenetre1()
If WinExists("nom 2") Then Fenetre2()
If WinExists("nom 3") Then Fenetre3()
If WinExists("nom 4") Then Fenetre4()
...
If WinExists("nom X") Then FenetreX()
WEnd
Func Fenetre1()
...
EndFunc
Func Fenetre2()
...
EndFunc
Func Fenetre3()
...
EndFunc
Func Fenetre4()
...
EndFunc
...
Func FenetreX()
...
EndFunc
Bonne chance

Re: [..] Abonner le script a un événement.
Posté : lun. 21 avr. 2008 14:20
par fred
Bonjour a tous,
merci beaucoup Firefox pour ta contri.....je ne sais pas si cela va tout a fait correspondre a mon besoin, mais en tout cas je prend ton script et le garde sous la main.
J'aimerais avoir votre opinion sur la solution que j'ai mis en place....
l'idée : le script 1 ( ci dessous) qui est convertit en .exe..gère l'activation de nouvelle fenetre et envoi un touche clavier ( ici le space qui va etre changé)....
le script 2 lui, va s'abonner a l'appui de la touche...
Code : Tout sélectionner
Global $test
; variable qui permet de faire une pause dans l'envoi des space
$test = 1
Sleep(10000)
; l'appui de la touche pause permet de faire une pause..de stopper l'envoi des space
HotKeySet("{PAUSE}", "pause")
HotKeySet("{ESC}", "Terminate_pause")
; boucle infini qui ..des qu'une fenetre s'ouvre, envoi
While 1
; si on n'est pas dans la fenetre active alors une autre fenetre s'est ouverte...on test si on est en pause au non...
If Not WinActive("nom fenetre principale", "") Then
If $test = 0 Then
Send("{SPACE}")
Else
Sleep(150)
EndIf
Else
Sleep(60)
EndIf
WEnd
;on fait une pause dans l'envoi de la bare d'espace
Func pause()
$test = 1
EndFunc ;==>pause
;reprise du programme
Func Terminate_pause()
$test = 0
EndFunc ;==>Terminate_pause
qu'est ce que vous en pensé.?...votre avis.?
merci par avance.
Re: [..] Abonner le script a un événement.
Posté : lun. 21 avr. 2008 15:38
par Firefox2
Bon, je vais aller droit au but, j'ai rien capté xD
Essaye de faire une bonne présentation, ça sera plus clair, et j'ai l'impression qu'il y a des EndIf en trop...
Re: [..] Abonner le script a un événement.
Posté : mar. 22 avr. 2008 10:29
par fred
Bonjour Firefox,
c'est quoi que tu n'as pas compris.?....
le code que j'ai montré est le code du script 1.
1- Celui qui attend le changement , l'ouverture d'une fenêtre autre que la fenêtre standard ( ici on va considéré que si il y a une autre fenêtre alors c'est une fenêtre d'erreur)....
2- lorsque ce script détecte le changement d'une fenêtre, alors il fait un send key du clavier......
3- ce send key est ensuite récupéré par le script 2.....celui qui teste l'application...(..au démarrage du script 2..il y a abonnement a une touche clavier..)..
4- si il y a touche clavier alors c'est qu'il y a une ouverture de fenêtre d'erreur...et traitement dans un fichier de log..
est ce que c'est plus clair...?...
puis je avoir votre avis je vous prie..
Re: [..] Abonner le script a un événement.
Posté : mar. 22 avr. 2008 10:45
par Firefox2
Ah d'accord, je viens de voir ou tu veux en venir
Mais pourquoi utiliser 2 scripts et la touche espace ?
A mon avis, tu devrais pouvoir faire tout ça dans un seul script sans avoir besoin d'appuyer sur une touche mais si ça marche comme ça, alors ça va

Re: [..] Abonner le script a un événement.
Posté : mar. 22 avr. 2008 15:25
par fred
Oui, tu as raison.....c'est juste que ce sera utilisé par d'autres scripts ( ce sont des scripts de tests.....un script par scénario de test)..alors je me suis dis que ce serait mieux de faire un petit script pour générer une touche clavier selon que l'on sort de la fenetre attendu....
mais si vous avez d'autres propositions je suis preneur....
Re: [..] Abonner le script a un événement.
Posté : mar. 22 avr. 2008 16:29
par Firefox2
Oui, j'ai une solution plus propre qui est la suivante:
Dans le script qui envoyait les espaces et qui est utilisé dans plusieurs autres scripts, tu remplaces
par
Dans les autres script, tu fais
Code : Tout sélectionner
$output = Run(@AutoItExe & " script1.au3", @ScriptDir, @SW_SHOW, $STDOUT_CHILD)
et quand tu veux récupérer la valeur(si elle existe), tu fais
Re: [..] Abonner le script a un événement.
Posté : mer. 23 avr. 2008 11:11
par fred
Bonjour Firefox,
Oui, cela me sera utile...mais............comment en faisant cela..on "abonne" le script 2 au fait qu'il y a un console write..et qu'il faut qu'il lise..?......
car le script 1 envoi de l'info des qu'une fenetre s'ouvre.....
merci de ta réponse.
Re: [..] Abonner le script a un événement.
Posté : mer. 23 avr. 2008 16:03
par Firefox2
En fait, ça ne marchera vraiment bien que si tu as une boucle While dans le script 2, et à l'intérieur de celle-ci, tu mets
en remplaçant ... par ce que tu veux

Re: [..] Abonner le script a un événement.
Posté : lun. 28 avr. 2008 18:19
par fred
Bonjour Firefox,
merci pour ta contri.....pour le moment cela semble marcher.....le post peut etre résolu......mais si il y a une personne qui propose autre chose je suis preneur...
merci Firefox.