[R] Abonner le script a un événement.
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[R] Abonner le script a un événement.
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...
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.
Salut !
Dans ton 1er cas, tu peux faire quelque chose du genre:
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:
Bonne chance 
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
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

Re: [..] Abonner le script a un événement.
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...
qu'est ce que vous en pensé.?...votre avis.?
merci par avance.
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
merci par avance.
Modifié en dernier par jbnh le ven. 22 août 2008 22:05, modifié 3 fois.
Raison : correction et mise en forme du code.
Raison : correction et mise en forme du code.
Re: [..] Abonner le script a un événement.
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...
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.
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..
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.
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

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.
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....
mais si vous avez d'autres propositions je suis preneur....
Re: [..] Abonner le script a un événement.
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 et quand tu veux récupérer la valeur(si elle existe), tu fais
Dans le script qui envoyait les espaces et qui est utilisé dans plusieurs autres scripts, tu remplaces
Code : Tout sélectionner
Send("{SPACE}")
Code : Tout sélectionner
ConsoleWrite("ce que tu veux ici")
Code : Tout sélectionner
$output = Run(@AutoItExe & " script1.au3", @ScriptDir, @SW_SHOW, $STDOUT_CHILD)
Code : Tout sélectionner
StdoutRead($output)
Re: [..] Abonner le script a un événement.
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.
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.
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 
Code : Tout sélectionner
If StdoutRead($output) = "bla bla" Then ...

Re: [..] Abonner le script a un événement.
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.
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.