AppleScript devient une application active

13

Comment pourrais-je exécuter du code (par exemple display dialog("test")) en utilisant AppleScript uniquement si l'application "Finder" est actuellement active / active.

William
la source
Euh, si l'application est déjà active, que comptez-vous accomplir en la réactivant?
Kent
stackoverflow.com/questions/3718520/… inactif est pertinent mais ne résout pas le problème.
William
Vous devez clarifier votre question. Le script de ma réponse fonctionne, pour une définition donnée de «travaux», c'est-à-dire qu'il indique avec précision si le Finder est au premier plan ou non.
Tetsujin
@Tetsujin mis à jour
William
Comment allez-vous lancer l'application Applescript? Double-cliquez dessus, bien sûr, affichera toujours le Finder comme étant le «deuxième à dernier» au premier plan. Modification de la réponse - cela fonctionnera si elle est appelée depuis Script Editor, mais «échoue» si vous double-cliquez dans le Finder, car cela donne un faux positif
Tetsujin

Réponses:

18

Cela fonctionnera si le script est appelé à partir de l'Éditeur de script, car il `` s'écarte '' pour vérifier la prochaine application en ligne, mais échouera si vous double-cliquez sur le Finder, car le Finder sera alors toujours le dernier en ligne.

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

Laisser la réponse précédente ici pour la postérité

Rejigged la réponse entière après avoir mal lu la question au départ ;-)

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
Tetsujin
la source
+1 Bien que votre solution proposée ne semble pas fonctionner telle quelle. J'obtiens "test" tant que l'application est ouverte et pas nécessairement si elle est active ou non.
William
une repenser… réponse éditée
Tetsujin
réécriture complète, maintenant je suis de retour sur mon bureau - cela fait maintenant exactement ce que vous avez demandé.
Tetsujin
2
vous pouvez également remplacer la deuxième commande de dialogue par display dialog (activeApp)pour confirmer exactement ce que le script pense être le plus en avant.
Kent
1
Soyez prudent avec cela - les noms d'applications de certaines applications (par exemple, tell application "app_name") diffèrent de leurs noms de processus (par exemple, set frontmost of process "app_process" to true).
BallpointBen