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
- 1. Poczekaj, aż kolejkaUserWorkItem zakończy się
- 2. Poczekaj, aż zakończy się Application.Calculate
- 3. Poczekaj, aż uruchomi się tomcat
- 4. Python selenu: poczekaj, aż element będzie klikalny - nie działa
- 5. Poczekaj, aż strona zostanie odświeżona
- 6. Poczekaj, aż funkcja zostanie załadowana
- 7. Poczekaj, aż element będzie zawierał określony tekst z CasperJS
- 8. Poczekaj, aż baza danych uzyska dane
- 9. Android Espresso: Poczekaj, aż aktywność się zakończy/uruchom
- 10. Poczekaj wewnątrz metody, aż zostanie przechwycone zdarzenie
- 11. jQuery .load() Poczekaj, aż zawartość zostanie załadowana.
- 12. Poczekaj, aż poprzednie .append() zostanie zakończone
- 13. Poczekaj, aż zostanie uruchomione zdarzenie kliknięcia C#
- 14. Poczekaj na funkcję, aż użytkownik przestanie pisać
- 15. Najedź na element i poczekaj z Selenium WebDriver używając Java
- 16. Poczekaj, aż elementy HTML otrzymają klasę, a następnie coś zrób.
- 17. jQuery Dołącz plik CSS i poczekaj aż do załadowania?
- 18. jQuery Poczekaj, aż asynchroniczne wywołania ajax zostaną zakończone
- 19. Poczekaj aż obietnicy i zagnieżdżone thens są kompletne
- 20. jQuery: Poczekaj, aż wiele żądań GET zostanie pomyślnie przetworzonych.
- 21. Poczekaj, aż wszystkie wątki zakończył swoją pracę w puli wątków
- 22. Tkinter: Poczekaj na element w kolejce
- 23. Jak czekać, aż dojo istnieje element?
- 24. Anuluj toast na Androida, zanim pojawi się
- 25. Zatrzymaj wykonywanie GCD, gdy pojawi się ViewController
- 26. Czy APC pojawi się w PHP7?
- 27. AutoIt do Pythona szyfrowania/deszyfrowania
- 28. Wybrany element pojawi się z ramką zaznaczoną na chromie i safari
- 29. Po najechaniu jednym pseudo elementem, czy pojawi się drugi pseudo element?
- 30. Co się stanie, gdy pojawi się przepełnienie timestampu (rowversion)?
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