Perché questo Applescript spesso fallisce la prima volta, ma funziona sempre dopo?

1

Il seguente oggetto Applescript apre una barra dei menu chiamata QuickHue e quindi fa clic su un elemento specificato nel menu. Spesso, quando uso il applescript, non fa nulla. Ma se aspetto un momento o due e riprovo, funziona perfettamente. E continua a funzionare. Ma se passa un po 'di tempo e lo faccio scattare di nuovo, fallirà di nuovo la prima volta. Dopo, funziona come un campione. Ecco il applescript. Qualche idea su cosa sta succedendo qui?

ignoring application responses
    tell application "System Events" to tell process "QuickHue"
        click menu bar item 1 of menu bar 1
    end tell
end ignoring
do shell script "killall System\ Events"
delay 0.1
tell application "System Events" to tell process "QuickHue"
    tell menu bar item 1 of menu bar 1
        click menu item 2 of menu 1
    end tell
end tell
    
posta 2oh1 08.07.2013 - 06:58
fonte

2 risposte

0

Forse puoi scrivere un ciclo che tenga traccia di se lo script ha avuto successo e continua a provare fino a quando non lo ha (o se è trascorso un certo periodo di tempo). Se in effetti il problema è che gli eventi di sistema non sono completamente avviati, il ciclo potrebbe chiedere gli eventi di sistema se gli eventi del sistema delle applicazioni sono in esecuzione. Ecco una semplice funzione che puoi usare:

on appIsRunning(appName)
    tell application "System Events" to (name of processes) contains appName
end appIsRunning

Per essere sicuro che sia stato avviato completamente, potresti implementare il tuo ritardo dopo il ciclo.

Ecco come appare la funzione del ciclo:

on startApp(appName)
    set IsRunning to false
    set tries to 20
    repeat until (IsRunning is true or tries is 0)
        set IsRunning to appIsRunning(appName)
        set tries to (tries - 1)
        delay 0.1
    end repeat
end startApp

O forse hai un altro modo per determinare il buon esito dello script ... c'è qualche stato che puoi controllare per determinare il successo? In tal caso, è possibile eseguire il ciclo fino a quando non viene soddisfatta tale condizione anziché all'avvio di Eventi di sistema.

Un'altra cosa è che non so se gli eventi di sistema debbano "registrarsi" con applescript prima che un applescript si spenga affinché funzioni. In tal caso, potresti provare questo: puoi creare uno script di supporto separato che avvii eventi di sistema e poi esegue il tuo script in questo modo:

startApp("System Events")
set myApp to "/Users/whatever/myScriptAsApp.app"
do shell script "open " & quoted form of POSIX path of myApp & " 2>&1 &"

Fammi sapere come va. Spesso ho lo stesso problema con te con un paio di miei script. Non ho ancora provato questo.

Buona fortuna, Rob

    
risposta data 13.08.2013 - 15:19
fonte
1

Hai ragione, non l'ho testato abbastanza bene. L'errore è stato mostrato quando System Events non era già in esecuzione. Come ulteriore soluzione, ho aggiunto launch application "System Events" e delay 0.2 all'inizio:

launch application "System Events"
delay 0.2
ignoring application responses
    tell application "System Events" to tell process "QuickHue"
        click menu bar item 1 of menu bar 1
    end tell
end ignoring
do shell script "killall System\ Events"
delay 0.1
tell application "System Events" to tell process "QuickHue"
    tell menu bar item 1 of menu bar 1
        click menu item 2 of menu 1
    end tell
end tell

Se continua a non funzionare, prova ad aumentare i ritardi.

    
risposta data 08.07.2013 - 20:01
fonte

Leggi altre domande sui tag