Wie für zwei Fenster gleichzeitig in AutoIt WinWait?
Frage
Ich möchte seine wissen, ob möglich „WinWaitActive“ für „WindowWithThisTitle“ und „WindowWithThatTitle“ zugleich. Ich bin ein Befehl ausgeführt wird, und es könnte ein Fenster sein, mir zu sagen, dass die Verbindung fehlgeschlagen ist oder ein Benutzer / Pass Dialog kommen.
Gibt es eine andere Art und Weise als dies zu tun?
WinWaitActive("Title1", "", 5)
If(WinExists("Title1")) Then
MsgBox(0, "", "Do something")
Else
If(WinExists("Title2")) Then
MsgBox(0, "", "Do something else")
EndIf
EndIf
Weil ich will nicht das Timeout haben, die länger als 15 Sekunden sein könnten.
Vielen Dank im Voraus!
Lösung
Wie wäre es etwa so aus.
$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
Weil ich nicht will das haben, Timeout, die mehr als 15 sein könnte Sekunden.
WinWaitActive () hat kein Timeout, wenn Sie eine angeben. Sie gab es einen 5 Sekunden Timeout, aber man könnte diesen weglassen und es würde für immer warten.
Andere Tipps
Eine einfachere Lösung könnte sein, einen REGEX Titel in Ihrem WinWaitActive
zu verwenden, wie hier definiert: http://www.autoitscript.com/autoit3/docs/intro/windowsadvanced.htm
Sie würden dann so etwas wie diese:
$hWnd = WinWaitActive("[REGEXPTITLE:(WindowWithThisTitle|WindowWithThatTitle)]")
If WinGetTitle($hWnd) = "WindowWithThisTitle" then
DoSomething()
Else
DoSomethingElse()
EndIf
Sie können diese Funktionen für zwei Fenster verwenden ..
; #FUNCTION# ====================================================================================================================
; Name...........: _2WinWait
; Description ...: Wait For Tow Windows .
; Syntax.........: _2WinWait ($FirstTitle,$SecondTitle,[$FirstText = "" ,[$SecondText = ""]] )
; Parameters ....: $FirstTitle - Title Of First Wondow
; $SecondTitle - Title Of Second Wondow
; $FirstText - Text Of First Wondow
; $SecondText - Text Of Second Wondow
; Return values .: Success - None
; Failure - Returns a 0 => If Your Titles Is Wrong
; Author ........: Ashalshaikh : Ahmad Alshaikh
; Remarks .......:
; Related .......:
; Link ..........;
; Example .......; No
; ===============================================================================================================================
Func _2WinWait ($FirstTitle,$SecondTitle,$FirstText = "" ,$SecondText = "" )
If $FirstTitle = "" Or $SecondTitle = "" Then
Return 0
Else
Do
Until WinExists ($FirstTitle,$FirstText) Or WinExists ($SecondTitle,$SecondText)
EndIf
EndFunc
; #FUNCTION# ====================================================================================================================
; Name...........: _2WinWait_Any
; Description ...: Wait For Tow Windows And Return Any Window Id Exists .
; Syntax.........: _2WinWait_Any ($FirstTitle,$SecondTitle,[$FirstText = "" ,[$SecondText = ""]] )
; Parameters ....: $FirstTitle - Title Of First Wondow
; $SecondTitle - Title Of Second Wondow
; $FirstText - Text Of First Wondow
; $SecondText - Text Of Second Wondow
; Return values .: Success - Number Of Window ==> 1= First Window , 2= Second Window
; Failure - Returns a 0 => If Your Titles Is Wrong
; Author ........: Ashalshaikh : Ahmad Alshaikh
; Remarks .......:
; Related .......:
; Link ..........;
; Example .......; No
; ===============================================================================================================================
Func _2WinWait_Any ($FirstTitle,$SecondTitle,$FirstText = "" ,$SecondText = "" )
If $FirstTitle = "" Or $SecondTitle = "" Then
Return 0
Else
Do
Until WinExists ($FirstTitle,$FirstText) Or WinExists ($SecondTitle,$SecondText)
If WinExists ($FirstTitle,$FirstTexit) Then
Return 1
Else
Return 2
EndIf
EndIf
EndFunc
Ich bin ziemlich neu und die Programmierung Welt im Allgemeinen AutoIT und ich hatte das gleiche Dilemma. Zum Glück dachte ich, einen gerade fwd Ausweg, es zu tun:
Do
$var1 = 0
If WinGetState("Document Reference","") Then
$var1 = 1
ElseIf WinGetState("Customer Search","") Then
$var1 = 1
EndIf
Until $var1 = 1
So ist es in der Schleife bleiben werde, bis er das Fenster findet und setzt $var1
bis 1. Es ist wahrscheinlich einfache Weise (ich bin sicher, dass Entwickler auf diesen schnappen), aber das ist gerade fwd genug für mich.
Sie können eine unendliche while-Schleife erstellen mit if-Anweisungen in dort:
#include <MsgBoxConstants.au3>
Example()
Func Example()
While 1
; Test if the window exists and display the results.
If WinExists("Windows Security") Then
Local $hWnd = WinWaitActive("Windows Security", "", 2000)
ControlSetText($hWnd, "", "[CLASS:Edit; INSTANCE:1]", "hel233")
ControlClick("Windows Security","","[CLASS:Button; INSTANCE:2]")
Sleep(5000)
EndIf
; Test if the window exists and display the results.
If WinExists("Spread the Word") Then
'The line below will wait until the window is active, but we don't need that
'Local $hWnd = WinWaitActive("Spread the Word", "", 2000)
WinClose("Spread the Word")
Sleep(5000)
EndIf
wend
EndFunc