Come determinare quale applicazione ha lanciato il servizio di automazione?

1

C'è un modo per determinare quale applicazione ha lanciato un servizio di automazione?

L'idea è di controllare l'app che ha lanciato il servizio, con uno script shell / apple e reagire in modo diverso a seconda dell'app.

EDIT:

Quindi quando faccio qualcosa del genere ...

il servizio, creato in Automator, è in grado di stabilire da quale applicazione è stato avviato.

EDIT2:

La soluzione suggeriva di interrogare la maggior parte delle app usando Applescript, mentre una possibile soluzione è tutt'altro che ideale. Mi sembra che se il sistema è occupato o ci sono ritardi nell'avvio del flusso di lavoro, potrebbe restituire l'app sbagliata e confondere il flusso di lavoro.

    
posta Vic 12.09.2014 - 23:11
fonte

3 risposte

2

Il commento di Buscar mi ha fatto controllare la gerarchia del processo e si scopre che un servizio è un processo sub-sub-sub dell'applicazione che lo ha lanciato.

Quindi,ancheseinmolticasi,unaqueryperfrontmostapplicationpotrebbeessereok,pensocheguardarel'alberodelprocessosiameglio.

Eccoalcuniesempidicodicedaunflussodilavorodelservizioditestchepermesembrafunzionareognivolta...

onrun{input,parameters}setarpidto(doshellscript"echo $PPID")
    display dialog "Automator Runner PID is: " & arpid

    set srpid to (do shell script "ps -o ppid -p " & arpid & " | tail -1")
    display dialog "Service Runner PID is: " & srpid

    set appid to (do shell script "ps -o ppid -p " & srpid & " | tail -1")
    display dialog "Application PID is: '" & first word of appid & "'"

    tell application "System Events"
        set activeApp to (name of first process whose unix id is (appid as integer))
    end tell

    display dialog activeApp

    return input
end run
    
risposta data 13.09.2014 - 20:38
fonte
1

Puoi inserire questo oggetto Applescript nel tuo flusso di lavoro:

tell application "System Events" to get name of first process whose frontmost is true

Produrrà il nome dell'attuale app in primo piano (non puoi davvero chiamare un servizio da un'applicazione inattiva). Puoi quindi passarlo come una stringa in un'altra azione come questa:

    
risposta data 13.09.2014 - 00:10
fonte
1

AppleScript:

tell application "System Events"    
    -- Get App Name
    set frontApp to (path to frontmost application as Unicode text) 
    -- Match App Name
    if frontApp ends with "ThisParticular.app:" then
        -- Do this and that
    end if

end tell
    
risposta data 13.09.2014 - 02:37
fonte

Leggi altre domande sui tag