AppleScript ottiene l'applicazione attiva


13

Come potrei eseguire il codice (ad esempio display dialog("test")) utilizzando AppleScript solo se l'applicazione "Finder" è attualmente attiva / attiva.


Ehm, se l'applicazione è già attiva, cosa miri a realizzare attivandola di nuovo?
Kent,

stackoverflow.com/questions/3718520/… l' idle è rilevante sebbene non risolva il problema.
William,

Devi chiarire la tua domanda. La sceneggiatura nella mia risposta funziona, per una determinata definizione di "opere", ovvero indica accuratamente se Finder è in primo piano.
Tetsujin,

@Tetsujin aggiornato
William

Come hai intenzione di lanciare l'app Applescript? Facendo doppio clic su di esso, ovviamente, verrà sempre visualizzato il Finder come il "secondo all'ultimo" in primo piano. Modifica della risposta: funzionerà se viene chiamato dall'editor di script, ma "non riesce" se si fa doppio clic nel Finder, poiché fornisce un falso positivo
Tetsujin,

Risposte:


18

Funzionerà se lo script viene chiamato da Script Editor, in quanto "evita" di controllare la prossima app in linea, ma fallirà se si fa doppio clic da Finder, poiché Finder sarà sempre l'ultimo in linea.

tell application "System Events"
    set frontmostProcess to first process where it is frontmost
    set visible of frontmostProcess to false
    repeat while (frontmostProcess is frontmost)
        delay 0.2
    end repeat
    set secondFrontmost to name of first process where it is frontmost
    set frontmost of frontmostProcess to true
end tell

tell application (path to frontmost application as text)
    if "Finder" is in secondFrontmost then
        display dialog ("Finder was last in front")
    else
        display dialog (secondFrontmost & " was last in front")
    end if
end tell

Lasciando qui la risposta precedente per i posteri

Rifiuta l'intera risposta dopo non aver letto correttamente la domanda inizialmente ;-)

tell application "System Events"
    set activeApp to name of first application process whose frontmost is true
    if "Finder" is in activeApp then
        display dialog ("test")
    else
        display dialog ("test2")
    end if
end tell

+1 Anche se la soluzione proposta non sembra funzionare così com'è. Ottengo "test" fintanto che l'applicazione è aperta e non necessariamente se è attiva o meno.
William,

un ripensamento ... risposta modificata
Tetsujin,

completa riscrittura, ora sono tornato sul mio desktop - questo ora fa esattamente quello che mi hai chiesto.
Tetsujin,

2
puoi anche sostituire il secondo comando di dialogo con display dialog (activeApp)per confermare esattamente quello che lo script ritiene essere il primo.
Kent,

1
Fai attenzione: i nomi di alcune app (ad es. tell application "app_name") Differiscono dai nomi dei processi (ad es set frontmost of process "app_process" to true.).
BallpointBen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.