[R] Fonction WinExists() qui ne fonctionne pas

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
jpascal
Niveau 6
Niveau 6
Messages : 239
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

[R] Fonction WinExists() qui ne fonctionne pas

#1

Message 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 :

Code : Tout sélectionner

Func Test()
If WinExists($titre) Then Go() 
EndFunc
puis j'ajoute le code :

Code : Tout sélectionner

AdlibRegister("Test")
While 1
WEnd
Ca fonctionne aussi.

Là où je ne comprends pas c'est si je fais :
► Afficher le texte
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é ?
Modifié en dernier par jpascal le mar. 25 mars 2014 10:42, modifié 1 fois.
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Fonction WinExists() qui ne fonctionne pas

#2

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
jpascal
Niveau 6
Niveau 6
Messages : 239
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

Re: [..] Fonction WinExists() qui ne fonctionne pas

#3

Message 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 ?
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Fonction WinExists() qui ne fonctionne pas

#4

Message par jguinch »

Avec ça, ça marche :
► Afficher le texte
Tu as peut-être un problème dans le test du nom de la fenêtre... ?
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
jpascal
Niveau 6
Niveau 6
Messages : 239
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

Re: [..] Fonction WinExists() qui ne fonctionne pas

#5

Message par jpascal »

Pour être complet, ma fonction Test() est du genre
► Afficher le texte
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.
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2128
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Fonction WinExists() qui ne fonctionne pas

#6

Message 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 ?
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
jpascal
Niveau 6
Niveau 6
Messages : 239
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

Re: [..] Fonction WinExists() qui ne fonctionne pas

#7

Message 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. :oops:
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
Répondre