2013-01-28 21 views
5

Próbuję zautomatyzować aplikację za pomocą AutoIt, i muszę poczekać, aż kontrolka pojawi się w aplikacji, zanim zacznie się automatyzacja. Ta kontrola ładuje się krótko po uruchomieniu aplikacji, ale nie zmienia tytułu okna. Jak czekać na pojawienie się kontrolki?AutoIT Poczekaj, aż element kontrolny pojawi się

Odpowiedz

7

Aby uzyskać uchwyt do sterowania innym interfejsem GUI, należy użyć identyfikatora AutoIt Window Info Tool w celu zidentyfikowania tego elementu sterującego. Aby uzyskać nazwę klasy kontrolki, przejdź do zakładki "Kontrola" i wyszukaj wartość "ClassnameNN". Teraz możesz użyć tej wartości, tak jak to zrobiłem w poniższym przykładzie.

Oczywiście musisz zastąpić "Button1" informacjami uzyskanymi z AutoIt Info Tool i odpowiednio zmodyfikować tytuły okien.

Global $hCtrl = 0, $Waiting = True 

; your GUI loop 
While (1) 
    If $Waiting And WinExists("Title of OtherApp.exe") Then 
     $hCtrl = ControlGetHandle("Title of OtherApp.exe", "", "Button1") 
     If $hCtrl Then 
      ; we got the handle, so the button is there 
      ; now do whatever you need to do 
      GUICtrlCreateLabel("Button is there!", 10, 10) 
      $Waiting = False 
     EndIf 
    EndIf 

    $iMsg = GUIGetMsg() 
    Switch $iMsg 
     Case $GUI_EVENT_CLOSE 
      ExitLoop 
    EndSwitch 
WEnd 
+0

Podczas ($ Waiting), not While (1). Nigdy nie wyrwie pętli while. To jednak działa z tą modyfikacją, więc dziękuję za odpowiedź! –

+0

@JohnMoses Nie "While (1)" jest poprawne, ponieważ jest to tylko fragment, a nie pełne rozwiązanie robocze. Skrypty AutoIt, które mają własny interfejs użytkownika, składają się z nieskończonej pętli, która przechwytuje komunikaty interfejsu użytkownika i to jest to, co chciałem pokazać w moim skrypcie. Zobacz: https://www.autoitscript.com/autoit3/docs/guiref/GUIRef_MessageLoopMode.htm – mrt

+1

@JohnMoses Rozszerzyłem mój przykład, aby było bardziej zrozumiałe. (mam nadzieję :)) – mrt

-1

Chciałbym dodać do odpowiedzi Mrta. Na przykład próbuję uzyskać moment, gdy tytuł w ciągu czarnego owalu jest już widoczny, tj

Ale tutaj jest pierwszym etapem uruchomienia, gdy $hCtrl oczywiście nie jest widoczny

ale $hCtrl = ControlGetHandle("Title of OtherApp.exe", "", "Static13") powraca ad-hoc już TRUE (coś jak <HWnd>0x000...192 itp)

Moje rozwiązanie jest dodanie (kontrola) title to ControlGetHandle:

ControlGetHandle("Title of OtherApp.exe", "Отключено", "Static13") 
+0

Czy policjanci spadkowi mogą wyjaśnić, dlaczego dla dobra uczniów? – Mawg

+1

To nie działa teraz, ale interfejs docelowy mimo wszystko przesuwał się naprzód. – Hippopotamus

Powiązane problemy