Page 1 sur 1
[R] Fonction WinExists() qui ne fonctionne pas
Posté : mer. 19 mars 2014 15:36
par jpascal
Bonjour,
Je veux effectuer une action lorsqu'une fenêtre dont le titre $titre apparaît.
Le code If WinExists($titre) Then Go() fonctionne correctement.
Je crée la fonction :
puis j'ajoute le code :
Ca fonctionne aussi.
Là où je ne comprends pas c'est si je fais :
► Afficher le texte
Code : Tout sélectionner
"Création de GUI"
AdlibRegister("Test")
While 1
$iMsg = GUIGetMsg()
Select
Case $iMsg = $GUI_EVENT_CLOSE
ExitLoop
Case $iMsg = $Button_xxx
Run("toto.exe")
EndSelect
WEnd
Si je lance toto.exe par un raccourci, lorsque la fenêtre apparaît, la fonction Go() se lance bien.
Si je clique sur le bouton pour lancer toto.exe, lorsque la fenêtre apparaît, la fonction Go() ne se lance pas.
Si je ferme ensuite le prog Auto-It et que je le relance, la fenêtre est bien détectée et la fonction Go() se lance.
En activant le mode "GUIOnEventMode", le problème est identique.
Est-il possible que le lancement du programme à partir de la GUI bloque la fonction AdlibRegister() tant qu'il n'est pas complétemenet lancé ?
Re: [..] Fonction WinExists() qui ne fonctionne pas
Posté : mer. 19 mars 2014 20:13
par mikell
jpascal a écrit :Si je clique sur le bouton pour lancer toto.exe, lorsque la fenêtre apparaît, la fonction Go() ne se lance pas.
AdlibRegister commande l'exécution de ta fonction toutes les 250 ms en continu
Le bouton ne commande son exécution qu'une seule fois, donc si la fenêtre existe à ce moment-là ça va marcher, sinon non
Moralité : il faut que ton bouton commande le lancement de AdlibRegister
Re: [..] Fonction WinExists() qui ne fonctionne pas
Posté : ven. 21 mars 2014 17:41
par jpascal
Désolé mais je ne comprends pas.
Le bouton lance toto.exe qui affiche une fenêtre nommée $titre au démarrage.
Pendant ce temps, AdlibRegister exécute la fonction Test() qui teste l'existence de la fenêtre nommée $titre toutes les 250 ms.
Pourquoi la fonction Test() ne voit-elle pas cette fenêtre ?
Re: [..] Fonction WinExists() qui ne fonctionne pas
Posté : ven. 21 mars 2014 21:47
par jguinch
Avec ça, ça marche :
► Afficher le texte
Code : Tout sélectionner
AdlibRegister("_ADLIB_WinWait")
GUICreate("", 400, 400)
$bouton = GUICtrlCreateButton("Run", 10, 10, 100, 25)
GUISetState()
While 1
$msg = GUIGetMsg()
If $msg = -3 Then Exit
If $msg = $bouton Then Run("notepad.exe")
WEnd
Func _ADLIB_WinWait()
If WinExists("Sans titre") Then
AdlibUnRegister("_ADLIB_WinWait")
MsgBox(0, "", "La fenêtre existe")
EndIf
EndFunc
Tu as peut-être un problème dans le test du nom de la fenêtre... ?
Re: [..] Fonction WinExists() qui ne fonctionne pas
Posté : mar. 25 mars 2014 09:33
par jpascal
Pour être complet, ma fonction Test() est du genre
► Afficher le texte
Code : Tout sélectionner
If WinExists($titre1) Then
...
ElseIf WinExists($titre2) Then
...
ElseIf WinExists($titre3) Then
...
ElseIf WinExists($titre4) Then
...
Et toutes les fenêtres dont le titre est $titre2, $titre3 ou $titre4 sont bien reconnues.
Le problème se pose donc bien avec la fenêtre $titre1.
Toutes les fenêtres sont générées pas le même logiciel, en l'occurrence
IBM Notes.
Sachant qu'IBM Notes est développé en
Java, il est possible que cela soit la cause de mon "disfonctionnement".
D'ailleurs Au3Info ne donne aucune information sur la fenêtre en question.
Mais cela n'explique pas pourquoi dans certains cas la fenêtre $titre1 est détectée et d'autres fois non.
Re: [..] Fonction WinExists() qui ne fonctionne pas
Posté : mar. 25 mars 2014 09:39
par TommyDDR
Malheureusement avec le peu de code fourni, nous ne pouvons pas savoir si vous avez fait une erreur d'affectation de variable ou autre.
Vous est-il possible de fournir un code complet et testable ?
Re: [..] Fonction WinExists() qui ne fonctionne pas
Posté : mar. 25 mars 2014 10:41
par jpascal
Pardonnez-moi mais après avoir épuré mon code pour le poster, il se trouve que j'ai trouvé la "coquille" :
Opt("WinTitleMatchMode", 3) ;substring
Or la valeur 3 correspond à "Exact".
Cette ligne se trouvant dans la fonction qui lance le programme, il était normal que la fenêtre soit trouvée lorsqu'on lance le programme manuellement ou qu'on lance l'exe AutoIt après le programme.
Comme quoi parfois les commentaires, lorsqu'ils sont erronés, peuvent être facteur d'erreur.
Désolé de vous avoir fait chercher pour rien.
