7
votes

Comment Winwait pour deux fenêtres simultanément dans AutoIt?

J'aimerais savoir si c'est possible à 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.

Y a-t-il une autre façon de le faire comme ça? P>

WinWaitActive("Title1", "", 5)
If(WinExists("Title1")) Then
 MsgBox(0, "", "Do something")
Else
 If(WinExists("Title2")) Then
  MsgBox(0, "", "Do something else")
 EndIf
EndIf


1 commentaires

Vous pouvez voir Ce conseil d'autohotkey pour une réponse que vous pourriez être capable de transférer.


5 Réponses :


5
votes

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


7 commentaires

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 , "" La fenêtre est interrogé tous les 250 millisecondes environ. ".



2
votes

Vous pouvez utiliser ces fonctions pour deux fenêtres .. xxx

pour plus d'exemples


0 commentaires

1
votes

Je suis assez nouveau pour autoit 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: xxx

alors il restera dans la boucle jusqu'à ce qu'il trouve la fenêtre et définit $ var1 à > 1 . 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.


0 commentaires

8
votes

Une solution plus simple peut être d'utiliser un titre de regex dans votre winwaitance tel que défini ici

vous auriez alors quelque chose comme ceci: xxx


1 commentaires

Le synax doit être: $ hwnd = winwaitactive ("[Regexptitle: * WindowwithIsidTle. * |. * Fenêtre withThatterle. *]" "



0
votes

Vous pouvez créer une boucle infinie tandis que si des déclarations de là: xxx


0 commentaires