كيف تنفخ لنوافذتين في وقت واحد في تلقائي؟
سؤال
أود أن أعرف ما إذا كان من الممكن "winwaitactive" لـ "WindowWithThistitle" و "WindowWiththattitle" في نفس الوقت. أقوم بتنفيذ أمر وقد يكون هناك نافذة تخبرني أن الاتصال فشل أو حوار المستخدم/النجاح.
هل هناك طريقة أخرى تفعل ذلك؟
WinWaitActive("Title1", "", 5)
If(WinExists("Title1")) Then
MsgBox(0, "", "Do something")
Else
If(WinExists("Title2")) Then
MsgBox(0, "", "Do something else")
EndIf
EndIf
لأنني لا أريد أن يكون لدي مهلة قد تكون أكثر من 15 ثانية.
شكرا مقدما!
المحلول
ماذا عن شيء مثل هذا.
$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
لأنني لا أريد أن يكون لدي مهلة قد تكون أكثر من 15 ثانية.
لا يوجد لدى WinWaitactive () مهلة ما لم تحدد واحدة. لقد أعطيتها مهلة مدتها خمس ثوانٍ ولكن يمكنك تركها وستنتظر إلى الأبد.
نصائح أخرى
قد يكون الحل الأكثر بساطة هو استخدام عنوان Regex في الخاص بك WinWaitActive
كما هو محدد هنا: http://www.autoitscript.com/autoit3/docs/intro/windowsadvanced.htm
ثم سيكون لديك شيء مثل هذا:
$hWnd = WinWaitActive("[REGEXPTITLE:(WindowWithThisTitle|WindowWithThatTitle)]")
If WinGetTitle($hWnd) = "WindowWithThisTitle" then
DoSomething()
Else
DoSomethingElse()
EndIf
يمكنك استخدام هذه الوظائف لنوافذ اثنين ..
; #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
أنا جديد إلى حد ما على Autoit وعالم البرمجة بشكل عام وكان لدي نفس المعضلة. لحسن الحظ ، اكتشفت طريقة مستقيمة للقيام بذلك:
Do
$var1 = 0
If WinGetState("Document Reference","") Then
$var1 = 1
ElseIf WinGetState("Customer Search","") Then
$var1 = 1
EndIf
Until $var1 = 1
لذلك سيبقى في الحلقة حتى يجد النافذة ويتمكن $var1
إلى 1. ربما تكون هناك طرق أسهل (أنا متأكد من أن المطورين يلهثون في هذا) ولكن هذا مستقيم بما يكفي بالنسبة لي.
يمكنك إنشاء Lofinite أثناء حلقة مع إذا كانت هناك عبارات هناك:
#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