4 votes

Comment retravailler une commande "System Events" dans AppleScript, de manière à ce qu'elle fonctionne automatiquement dans toutes les applications ?

Avec le code AppleScript suivant dans une action "Exécuter AppleScript" dans un Service :

tell application "System Events"
    set theSBounds to {{572, 64}, {332, 515}}
    set position of window "Google Hangouts - myemailaddress@gmail.com" of application process "Google Chrome" to item 1 of theSBounds
    set size of window "Google Hangouts - myemailaddress@gmail.com" of application process "Google Chrome" to item 2 of theSBounds
end tell

le service ne fonctionnera que si l'application à partir de laquelle ce service a été appelé a été ajoutée à la liste des applications sous la rubrique "Autoriser les applications ci-dessous à contrôler votre ordinateur". Cette liste se trouve dans Préférences système Sécurité et confidentialité Accessibilité.

Est-il possible de modifier le code AppleScript de manière à ce qu'il ne soit pas nécessaire d'ajouter à la liste toutes les applications présentes sur l'ordinateur ? Ou bien, pour qu'il ne soit nécessaire d'ajouter qu'un seul élément à la liste, au lieu de toutes les applications présentes sur l'ordinateur ?

J'ai pensé que quelque chose comme cela pourrait fonctionner :

do shell script "osascript -e 'tell application \"System Events\"' -e 'set theSBounds to {{572, 64}, {332, 515}}' -e 'set position of window \"Google Hangouts - myemailaddress@gmail.com\" of application process \"Google Chrome\" to item 1 of theSBounds' -e 'set size of window \"Google Hangouts - myemailaddress@gmail.com\" of application process \"Google Chrome\" to item 2 of theSBounds' -e 'end tell'" with administrator privileges

mais ce code exige également que l'application à partir de laquelle le service est exécuté soit ajoutée à la liste d'accessibilité.

Note : Je ne veux exécuter cet AppleScript qu'en tant que service, et non dans une application créée par Automator, car le code reçoit du texte sélectionné en entrée (à l'échelle du système).

3voto

rubik's sphere Points 4760

J'ai trouvé une bonne solution (c'est-à-dire une solution de contournement).

Insérez le bloc de code "Événements système" dans une action "Exécuter AppleScript" et enregistrez-le comme son propre fichier d'application dans Automator. Remarque : l'extension de fichier de ce code doit être .app pour que cela fonctionne (nous y reviendrons dans un instant).

Allez dans Préférences système Sécurité et confidentialité Onglet Confidentialité Accessibilité. Ajoutez et cochez l'application nouvellement créée à la liste des applications autorisées à contrôler votre ordinateur.

Exécutez l'application nouvellement créée à partir de votre Service. Pour ce faire, vous pouvez ajouter la ligne suivante à votre code AppleScript :

do shell script "osascript -e 'tell application \"Application Name\" to activate'"

(J'ai l'habitude d'utiliser osascript à activate lors de l'utilisation d'une action "Exécuter AppleScript" dans un service, car cela permet de contourner un obstacle à l'utilisation d'AppleScript. bug avec les services que j'ai découvert .)

Votre service devrait maintenant fonctionner parfaitement dans toutes les applications de votre ordinateur, bien qu'une seule application (celle qui contient le code "System Events") ait explicitement reçu le pouvoir de contrôler l'ordinateur.

Le fichier doit être enregistré en tant que fichier .app, et non en tant que fichier .scpt ou .applescript. En effet, il n'est pas possible d'ajouter des fichiers .scpt ou .applescript à la liste des applications autorisées à contrôler votre ordinateur ; seuls les vrais fichiers .app peuvent être sélectionnés dans la boîte de dialogue.

Notez que le fichier .app ne doit pas nécessairement être créé dans Automator. Si vous créez le fichier .app dans script Editor.app et que vous suivez les autres étapes, le fichier .app fonctionnera de la même manière.

Il y a cependant une différence. Lorsque le fichier .app est créé dans Automator, il est possible d'utiliser l'une ou l'autre des options suivantes activate ou launch d'exécuter l'application dans leur service. Mais lorsque le fichier .app est créé dans l'éditeur script, on ne peut qu'utiliser la fonction activate pour exécuter l'application ; launch n'aboutira à rien.

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