J'aimerais savoir si c'est possible à Y a-t-il une autre façon de le faire comme ça? P> WinwaitiveCactive Code> pour
WindowwithThistitle code> et
windowwiththattitle code> en même temps. J'exécute une commande et il pourrait y avoir une fenêtre qui me dise que la connexion a échoué ou une boîte de dialogue utilisateur / passe à venir.
WinWaitActive("Title1", "", 5)
If(WinExists("Title1")) Then
MsgBox(0, "", "Do something")
Else
If(WinExists("Title2")) Then
MsgBox(0, "", "Do something else")
EndIf
EndIf
5 Réponses :
Que diriez-vous de quelque chose comme ça.
$stillLooking = True While $stillLooking $activeWindowTitle = WinGetTitle(WinActive("")) If $activeWindowTitle == "Title1" Then MsgBox(0, "", "Do something") $stillLooking = False ElseIf $activeWindowTitle == "Title2" Then MsgBox(0, "", "Do something else") $stillLooking = False EndIf sleep(5) WEnd
Mais ce Whileloop provoque un filetage / noyau de la CPU à 100%. Je pensais à une solution avec WinwaitiveCtive (regex) mais je ne sais pas créer une regex qui a un opérateur ou un opérateur. Une idée? Que voulez-vous dire avec "N'oubliez pas de voter!" d'ailleurs?
Le sommeil (5) - ou plus - réparera le problème de la CPU, c'était une boucle dure. WinwaITActive () ne fera que plusieurs cibles et son retour est un simple succès BOOL afin que vous ne puissiez pas vraiment le regener. Vous avez voté une fois depuis que vous avez commencé à utiliser un débordement de pile. Le système Stackoverflow ne fonctionne vraiment que si les gens votent. Si une question ou une réponse vous est utile, vous pouvez le voter avec la flèche vers le haut ou le bas avec la flèche vers le bas. Bonne chance, j'espère que cela a aidé si c'était que vous pourriez montrer que par vote.
Je n'ai pas encore marqué votre réponse comme "la" réponse parce que quelqu'un connaît peut-être une méthode sans boucle. Je vais juste attendre un peu de temps, puis la définir comme réponse si personne ne peut offrir une meilleure façon. Merci pour ton aide!
WinwaitActive () a également bouclées dans le code de cette fonction. J'ai du mal à imaginer une façon de faire quelque chose comme ça sans boucler dans un contexte procédural (vs axé sur les événements). Je suis sûr qu'un meilleur moyen de faire cela existe mais de cette façon est également susceptible d'avoir une boucle dedans.
Je suis d'accord, étant un environnement procédural, il serait presque impossible d'accomplir sans boucle. J'ai généralement mes longues boucles AutoIt Dormir un sommeil 1 / 8ème de seconde: Dormir (125) Ce sondage suffit souvent pour la plupart des besoins et ne porcine pas les cycles de la CPU.
Je suis d'accord John, je fais habituellement 200 ou plus dans les applications du monde réel. Une fenêtre ne se concentrera généralement pas et ne se concentrera pas dans un temps plus court que cela. Je voulais juste montrer que tout sommeil, même un court, le résoudra. Merci pour le +1!
Selon la documentation officielle d'AutoIt pour Winwaitactive Code>, "" La fenêtre est interrogé tous les 250 millisecondes environ. ".
Vous pouvez utiliser ces fonctions pour deux fenêtres ..
Je suis assez nouveau pour autoit em> et le monde de la programmation en général et j'avais ce même dilemme. Heureusement, j'ai compris une façon de la FWD droite pour le faire: alors il restera dans la boucle jusqu'à ce qu'il trouve la fenêtre et définit $ var1 code> à
> 1 code>. Il y a probablement des moyens probablement plus facilement (je suis sûr que les développeurs se gassent à la haletant), mais c'est assez droit de FWD pour moi. P> P>
Une solution plus simple peut être d'utiliser un titre de regex dans votre vous auriez alors quelque chose comme ceci: p> winwaitance code> tel que défini ici
Le synax doit être: $ hwnd = winwaitactive ("[Regexptitle: * WindowwithIsidTle. * |. * Fenêtre withThatterle. *]" "
Vous pouvez créer une boucle infinie tandis que si des déclarations de là:
Vous pouvez voir Ce conseil d'autohotkey pour une réponse que vous pourriez être capable de transférer.