2013-01-28 10 views
5

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

7

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 
+0

Mentre ($ in attesa), non mentre (1). Non uscirà mai dal ciclo while. Contiene però questa modifica, quindi grazie per la risposta! –

+0

@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

+1

@JohnMoses Ho esteso il mio esempio in modo che sia più chiaro. (si spera :)) – mrt

-1

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") 
+0

I downstaid potrebbero spiegare perché, a beneficio degli studenti? – Mawg

+1

Non funziona ora, ma l'interfaccia di destinazione è comunque andata avanti. – Hippopotamus

Problemi correlati