¿Cómo puedo determinar qué aplicación lanzó el servicio automator?

1

¿Hay una manera de determinar qué aplicación lanzó un Servicio Automator?

La idea es verificar la aplicación que lanzó el servicio, con un script de shell / apple y reaccionar de manera diferente dependiendo de la aplicación que fue.

EDITAR:

Entonces, cuando hago algo como esto ...

el servicio, creado en Automator, puede indicar de qué aplicación se lanzó.

EDIT2:

La solución sugerida, para consultar la aplicación que se encuentra más al frente usando Applescript, mientras que una posible solución está lejos de ser la ideal. Me parece que si el sistema está ocupado o si hay retrasos en el inicio del flujo de trabajo, podría devolver la aplicación incorrecta y confundir el flujo de trabajo.

    
pregunta Vic 12.09.2014 - 23:11

3 respuestas

2

El comentario de Buscar me hizo verificar la jerarquía de procesos y, como resultado, un servicio es un sub-sub-sub proceso de la aplicación que lo lanzó.

Entonces,aunqueenmuchoscasos,unaconsultaparaelfrontmostapplicationpuedeestarbien,creoqueesmejormirarelárboldeprocesos.

Aquíhayunejemplodecódigodeunflujodetrabajodeserviciodepruebaqueparamíparecefuncionarcadavez...

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
    
respondido por el Vic 13.09.2014 - 20:38
1

Puede colocar este Applescript en su flujo de trabajo:

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

Se mostrará el nombre de la aplicación de primer plano actual (no se puede llamar a un servicio desde una aplicación inactiva). Luego puede pasarlo como una cadena a otra acción como esta:

    
respondido por el 0942v8653 13.09.2014 - 00:10
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
    
respondido por el fartheraway 13.09.2014 - 02:37

Lea otras preguntas en las etiquetas