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
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
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")
Czy policjanci spadkowi mogą wyjaśnić, dlaczego dla dobra uczniów? – Mawg
To nie działa teraz, ale interfejs docelowy mimo wszystko przesuwał się naprzód. – Hippopotamus
Podczas ($ Waiting), not While (1). Nigdy nie wyrwie pętli while. To jednak działa z tą modyfikacją, więc dziękuję za odpowiedź! –
@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
@JohnMoses Rozszerzyłem mój przykład, aby było bardziej zrozumiałe. (mam nadzieję :)) – mrt