Applescript - attendi che la finestra / la finestra di dialogo appaiano / scompaiano

2

Sto eseguendo script su iTunes e ho riscontrato due problemi quando, in una fase del mio script, ho bisogno di verificare se le finestre / finestre di dialogo sono visualizzate o meno.

  1. Secondo In attesa che esista una finestra in Applescript? questo dovrebbe essere codice valido

    repeat until window "Print" of process "Evernote" exists

ma quando lo compilo ricevo questo messaggio di errore "La fine della linea prevista ma trovata" "" ("si riferisce alla" prima di E in Evernote). Perché? Quella domanda ha 2,5 anni, da allora qualcosa è cambiato? Sto usando OS X 10.11.

  1. Posso usare questo codice per verificare se la finestra delle informazioni sul brano è aperta in iTunes

    repeat until (not (exists window "Song Info"))

ma quando provo a cercare en Apri la finestra di dialogo con una linea simile

repeat until (exists window "Open")

la finestra non viene rilevata. Ho utilizzato Accessibility Inspector per ottenere alcune proprietà della finestra Informazioni sul brano e della finestra di dialogo Apri e le uniche differenze che ho notato sono il nome e il tipo. Song Info è una "finestra" mentre Open è una "finestra di dialogo". Quindi, ho anche provato queste due varianti sul codice precedente:

repeat until (exists dialog "Open")
repeat until (exists window dialog "Open")
repeat until (exists dialog window "Open")

ma nessuno di essi viene compilato.

Come posso rilevare la finestra di dialogo Apri?

    
posta d-b 26.02.2017 - 13:53
fonte

1 risposta

2

Il motivo per cui ottieni " Errore di sintassi La fine della linea prevista ma trovata" "". "quando si utilizza repeat until window "Print" of process "Evernote" exists è perché la stai utilizzando fuori dal contesto dell'applicazione chiamante. Potresti dire il significato, nel contesto dell'applicazione chiamante, non capisce il comando e l'AppleScript Editor non è scritto bene per esprimere ciò che l'errore significa davvero.

Ad ogni modo, l'esempio code sotto quando viene eseguito in ScriptEditor, da solo, aspetterà di mostrare "La tua attesa è finita!" finestra di dialogo fino a quando iTunes è aperto e premi O o fai clic su File & gt ; Aggiungi alla libreria ... sul iTunes menu .

tell current application
    tell application "System Events"
        repeat until (exists window "Add To Library" of application process "iTunes")
            delay 1
        end repeat
    end tell
    activate
    display dialog "Your wait is over!"
end tell
  • Nota l'uso del comando delay all'interno del repeat loop . Ovviamente il valore può essere impostato su qualcos'altro, anche frazioni di secondo , tuttavia dovresti sempre usare un ritardo per evitare Eventi di sistema da inutilmente innescando il loop centinaia di volte al secondo fino a quando la condizione si incontra.

Come regola generale ho scoperto che ogni volta che utilizzo code che ha ... process ... o ... application process ... è una chiamata fatta a o by Eventi di sistema e come tale in questo caso d'uso, il repeat loop deve essere compreso in tell istruzione o blocco di Eventi di sistema per non ottenere l' errore menzionato nel tuo OP.

    
risposta data 26.02.2017 - 17:57
fonte

Leggi altre domande sui tag