1 votos

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

¿Existe una forma de determinar qué aplicación lanzó un servicio de Automator?

La idea es comprobar la app que lanzó el servicio, con un shell/apple script y reaccionar de forma diferente dependiendo de qué app fue.

EDITAR:

Así que cuando hago algo así...

Launching service

el servicio, creado en Automator, puede decir desde qué aplicación se lanzó.

EDIT2:

La solución sugerida, consultar la aplicación más frontal usando Applescript, aunque es una solución posible está lejos de ser ideal. Me parece que si el sistema está ocupado o hay retrasos en el lanzamiento del flujo de trabajo, podría devolver la aplicación equivocada y confundir el flujo de trabajo.

2voto

SPRBRN Puntos 1008

El comentario de Buscar me hizo comprobar la jerarquía de los procesos y resulta que un servicio es un subproceso de la aplicación que lo lanzó.

Application and it's service

Por lo tanto, aunque en muchos casos, una consulta para el frontmost application puede estar bien, creo que mirar el árbol de procesos es mejor.

Aquí hay un ejemplo de código de un flujo de trabajo de servicio de prueba que para mí parece funcionar siempre...

on run {input, parameters}

    set arpid to (do shell script "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

1voto

0942v8653 Puntos 3617

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 actual en primer plano (realmente no se puede llamar a un servicio desde una aplicación inactiva). Luego puedes pasarlo como una cadena a otra acción como esta:

Workflow with the applescript passed into a textedit document

1voto

Tim Brigham Puntos 8727

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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X