1 votes

Comment déterminer quelle application a lancé le service automator ?

Existe-t-il un moyen de déterminer quelle application a lancé un service Automator ?

L'idée est de vérifier l'application qui a lancé le service, avec un shell/apple script et de réagir différemment selon l'application dont il s'agit.

EDITAR:

Donc, quand je fais quelque chose comme ça...

Launching service

le service, créé dans Automator, peut savoir à partir de quelle application il a été lancé.

EDIT2 :

La solution proposée, qui consiste à interroger l'application la plus en vue à l'aide d'Applescript, bien que possible, est loin d'être idéale. Il me semble que si le système est occupé ou s'il y a des retards dans le lancement du flux de travail, il pourrait renvoyer la mauvaise application et perturber le flux de travail.

2voto

Vic Points 1820

Le commentaire de Buscar m'a incité à vérifier la hiérarchie des processus et il s'avère qu'un service est un sous-sous-processus de l'application qui l'a lancé.

Application and it's service

Ainsi, même si dans de nombreux cas, une requête pour le frontmost application peut être correct, mais je pense qu'il est préférable de regarder l'arborescence du processus.

Voici un exemple de code d'un Service Workflow de test qui, pour moi, semble fonctionner à chaque fois...

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 Points 6754

Vous pouvez placer cet Applescript dans votre flux de travail :

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

Il affichera le nom de l'application au premier plan (vous ne pouvez pas vraiment appeler un service à partir d'une application inactive). Vous pouvez ensuite le passer sous forme de chaîne de caractères dans une autre action comme celle-ci :

Workflow with the applescript passed into a textedit document

1voto

fartheraway Points 4886

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

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X