Sto tentando di automatizzare un'applicazione utilizzando AutoIt, e ho bisogno di attendere che appaia un controllo all'interno dell'applicazione prima che l'automazione possa iniziare. Questo controllo viene caricato poco dopo l'avvio dell'applicazione, ma non modifica il titolo della finestra. Come posso aspettare che appaia il controllo?AutoIT Attendere la comparsa di un elemento di controllo
risposta
Per ottenere un handle per un controllo su un'altra GUI è necessario utilizzare AutoIt Window Info Tool per identificare tale controllo. Per ottenere il nome della classe del controllo, vai alla scheda "Controllo" e cerca il valore per "NomeClasseNN". Ora puoi usare questo valore come ho fatto nell'esempio qui sotto.
Ovviamente è necessario sostituire "Button1"
con le informazioni ottenute dallo Strumento Info Auto e modificare di conseguenza i titoli delle finestre.
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
Vorrei aggiungere alla risposta Mrt. Per esempio, io sto cercando di ottenere il momento in cui titolo all'interno ovale nero è già visibile, cioè
Ma qui è la prima fase di lancio, quando $hCtrl
non è ovviamente visibile
ma $hCtrl = ControlGetHandle("Title of OtherApp.exe", "", "Static13")
ritorna ad-hoc TRUE già (qualcosa come <HWnd>0x000...192
etc.)
La mia soluzione è quella di aggiungere (controllo) titolo a ControlGetHandle:
ControlGetHandle("Title of OtherApp.exe", "Отключено", "Static13")
I downstaid potrebbero spiegare perché, a beneficio degli studenti? – Mawg
Non funziona ora, ma l'interfaccia di destinazione è comunque andata avanti. – Hippopotamus
Mentre ($ in attesa), non mentre (1). Non uscirà mai dal ciclo while. Contiene però questa modifica, quindi grazie per la risposta! –
@JohnMoses No 'While (1)' è corretto poiché questo è solo uno snippet e non una soluzione pienamente funzionante. Gli script AutoIt che hanno una propria interfaccia utente sono costituiti da un loop infinito per catturare i messaggi dell'interfaccia utente e questo è ciò che volevo mostrare nel mio script. Vedi: https://www.autoitscript.com/autoit3/docs/guiref/GUIRef_MessageLoopMode.htm – mrt
@JohnMoses Ho esteso il mio esempio in modo che sia più chiaro. (si spera :)) – mrt