0 votes

AppleScript : Vérifiez si "System Events" a été chargé

Lorsqu'un utilisateur Active Directory (AD) se connecte, mon AppleScript se déclenche et tente de placer son répertoire d'origine AD dans la barre latérale pour un accès plus facile lors de l'ouverture et de l'enregistrement de documents.

Il fonctionne très bien, mais environ 10% du temps, il échoue parce que "System Events" n'a pas été chargé. J'ai essayé d'ajouter des délais en utilisant :

do shell script "sleep 2"

Mais cela ne résout pas le problème. J'ai augmenté le délai à quatre secondes, et bien que cela aide, ce n'est certainement pas idéal.

Ce serait beaucoup plus facile si je pouvais détecter le chargement du processus "System Events". Quelqu'un sait-il comment faire cela dans AppleScript ?

2voto

Fuzzy Purple Monkey Points 702

Le processus System Events ne démarre pas à la connexion, le délai peut donc être nécessaire pour une autre raison. System Events se désactive aussi automatiquement s'il n'est pas utilisé pendant quelques minutes.

Cela ne vous aidera probablement pas, mais vous pourriez essayer de lancer System Events au début du script :

launch application "System Events"

Vous pouvez également essayer d'utiliser un agent launchd comme celui-ci pour lancer un processus System Events à la connexion :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>test</string>
  <key>Program</key>
  <string>/System/Library/CoreServices/System Events.app/Contents/MacOS/System Events</string>
  <key>RunAtLoad</key> <!-- run at login -->
  <true/>
  <key>KeepAlive</key> <!-- run the program again if the previous program terminates -->
  <true/>
</dict>
</plist>

Vous pouvez normalement utiliser quelque chose comme tell application "System Events" to exists process "Finder" pour vérifier si un processus existe, mais cela nécessite évidemment de parler aux System Events. Dans ce cas, vous pourriez également utiliser un script shell comme celui-ci :

repeat 100 times
    do shell script "ps -eco comm= | grep -x 'System Events'; exit 0"
    if result is not "" then exit repeat
    delay 0.1
end repeat

ps -e est identique à -ax (comprend les processus de tous les utilisateurs et les processus sans terminal de contrôle), -c imprime les noms de commande au lieu des chemins absolus dans OS X, et -o comm= imprime uniquement les noms des commandes sans la ligne d'en-tête. Vous pouvez remplacer la commande shell par pgrep -x 'System Events'; exit 0 dans les versions 10.8 et ultérieures.

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