كيف تنفخ لنوافذتين في وقت واحد في تلقائي؟

StackOverflow https://stackoverflow.com/questions/3481399

  •  28-09-2019
  •  | 
  •  

سؤال

أود أن أعرف ما إذا كان من الممكن "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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top