0 votes

Gestionnaire de clic dans le script d'Apple

J'ai créé une application MacOS autonome en utilisant l'éditeur script. Au démarrage, l'app exécute un bash script et à la sortie, l'app exécute un autre bash script. Le code ressemble à ceci

do shell script "complete path to start script"
on quit 
     do shell script "complete path to quit script"
     continue quit
end quit 

Lorsque j'ouvre l'application, elle fait ce qu'elle est censée faire et l'application reste dans le dock jusqu'à ce qu'elle soit fermée. Je voudrais que le finder ouvre un dossier spécifique lorsque je clique sur le symbole de l'application dans le dock. Existe-t-il un moyen de le faire ?

0 votes

Le fait de cliquer spécifiquement sur l'icône du dock est plutôt difficile à mettre en œuvre. Toutefois, étant donné qu'un clic sur l'icône du dock activerait ou mettrait au point votre application, il s'agit d'une fonctionnalité relativement simple à mettre en œuvre.

0 votes

Je suis content que ce soit simple. Des conseils sur la façon de le mettre en œuvre ?

1voto

OnePablo Points 1

Il est difficile de faire en sorte que votre application réponde spécifiquement à un utilisateur qui clique sur son icône de dock. Une tâche plus simple consiste à faire en sorte que votre application réponde à l'acquisition du focus là où il appartenait auparavant à une autre application, c'est-à-dire chaque fois que votre application est amenée au premier plan, ce que fera un clic sur l'icône du dock.

J'ai fortement commenté le script ci-dessous pour vous guider à travers ce qui est pertinent. Tout ce que je n'ai pas commenté ou auquel je n'ai pas fait spécifiquement référence dans les commentaires devrait être laissé seul et là où il est, à moins que vous ne soyez sûr de savoir ce que vous faites.

Évidemment, cela ne servira pas à grand-chose s'il est simplement géré de l'intérieur. scriptÉditeur Vous devez donc l'incorporer dans le code AppleScript de votre application (ou, plutôt, incorporer le code AppleScript de votre application dans ce code), l'enregistrer et exécuter l'applet. Si vous n'y apportez aucune modification, une fois l'applet sauvegardée, vous verrez apparaître toutes les 10 secondes une notification vous indiquant que l'application est en cours d'exécution. "au ralenti..." et une boîte de dialogue s'ouvrira à chaque fois que l'application sera mise au point pour vous informer qu'elle est en cours de développement. "Focalisation acquise". .

-----------------------------------------------------------|
on run
    _init()

    # Your startup code goes here, which will
    # execute once when your application runs
    # e.g.
    #   do shell script "/path/to/start-script.sh"
end run

on idle
    # Any code you need to run repeatedly can
    # go here.  Otherwise, you can delete this
    # entire handler

    # The following line is test code:
    display notification "idling..."

    # The return value is how often (in seconds)
    # this handler will be called
    return 10
end idle

on activate
    # Insert code you want to execute whenever
    # your application receives focus, e.g.
    # 
    #   tell application "System Events" to ¬
    #       open folder "~/Path/To/Folder/"

    # The following line is test code:
    display dialog "Focus acquired."
end activate

on quit
    global |@|
    |@|'s removeObserver:me

    # Any other clean-up code that needs to
    # execute just before your application
    # exits should go here, e.g.
    #   do shell script "/path/to/quit-script.sh"

    continue quit
end quit
-----------------------------------------------------------|
# PRIVATE HANDLERS:
use framework "Foundation"
use framework "AppKit"
use scripting additions

property |@| : a reference to my NSWorkspace's ¬
    sharedWorkspace's notificationCenter

on _init()
    "NSWorkspaceDidActivateApplicationNotification"
    |@|'s addObserver:me selector:("_notify:") ¬
        |name|:result object:(missing value)

    idle
end _init

to _notify:notification
    local notification
    if my id = the notification's userInfo()'s ¬
        NSWorkspaceApplicationKey's ¬
        bundleIdentifier() as text ¬
        then activate me
end _notify:
-----------------------------------------------------------|

0 votes

Merci beaucoup @CJK ! J'ai donc utilisé do shell script "open path to folder" pour ouvrir le dossier, car le code proposé ne semble pas fonctionner sur mon système. Ce qui ne fonctionne pas comme je l'espérais, c'est que si j'active l'application, soit en cliquant sur l'icône du dock, soit en utilisant l'onglet de commande, je n'obtiens pas de menu pour l'application dans la barre de menu. Donc si je veux quitter l'application, je dois faire un clic droit sur l'icône du dock et sélectionner quitter. Ce serait bien de pouvoir utiliser la commande q pour cela.

0 votes

Re : Événements système : pouvez-vous coller le exact ligne de code que vous avez utilisée pour essayer d'ouvrir le dossier avec Événements du système . Quand vous dites que ça n'a pas marché, est-ce qu'il s'est passé quelque chose ? Re : menu : lorsque je lance l'applet, je faire obtenir un menu dans la barre de menu, et cmd + Q travaux. Votre applet dispose-t-elle d'un menu lorsque vous l'ouvrez pour la première fois, et celui-ci a-t-il disparu ? Ou bien n'y a-t-il pas de menu au départ, auquel cas il s'agit d'un paramètre que vous avez appliqué vous-même à un moment donné. Communiquez-moi les détails de ces deux problèmes et je vous aiderai à les résoudre dès que je serai de retour demain.

0 votes

J'ai copié votre code dans l'éditeur script. Puis j'ai décommenté la ligne tell application "System Events" to ¬ et celle d'après. J'ai remplacé "~/Path/To/Folder" avec un vrai dossier. Par exemple "~/Music/" . J'ai ensuite enregistré le code en tant qu'application et sélectionné "Stay open after run handler". Cela ne fonctionne pas, c'est-à-dire que le dossier n'est pas ouvert dans le Finder, même en remplaçant le chemin relatif par un chemin absolu. Il arrive même que l'applet se plante.

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