8 votes

Comment créer un AppleScript qui quittera une application à un moment précis et mettra l'ordinateur en veille ?

Je me suis amusé avec AppleScript et Automator pour faire fonctionner cette chose, mais je n'arrive pas à m'y retrouver. Si quelqu'un pouvait me montrer un exemple ou me donner quelques conseils sur la façon dont je peux configurer une application pour qu'elle se ferme à une heure spécifique, puis mettre l'ordinateur en veille ou l'éteindre, ce serait grandement apprécié.

16voto

ephsmith Points 2125

Je suppose que vous souhaitez lancer cette procédure plutôt que de la faire exécuter à une heure régulière.

Mon approche consisterait à lancer cette opération à partir de la ligne de commande, mais n'importe quelle commande peut être exécutée dans un composant shell script d'un Automator script moyennant quelques modifications. L'approche suivante combine quelques composants pour réaliser le travail :

  1. A tell pour quitter l'application
  2. Un appel de ligne de commande pour mettre l'ordinateur en veille
  3. Un appel à la ligne de commande pour programmer 1 et 2 à une heure précise.

1. Demander à l'application de quitter

Il peut s'agir d'une chose très simple :

osascript -e 'tell application "AppName" to quit'

2. Mise en veille de l'ordinateur

Jetez un coup d'œil à pmset pour plus de détails, mais la commande suivante mettra votre ordinateur en veille :

pmset sleepnow

3. Programmation d'une opération à exécuter à un moment précis

Jetez un coup d'œil à la à commande. Cette commande vous permet de spécifier l'heure d'exécution d'une commande. Vous devrez activer cette fonctionnalité, car elle n'est pas proposée par défaut. Pour activer la commande atrun exécuter la commande suivante [référence sur SU] :

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

Une fois que vous avez activé atrun Toute commande peut être programmée pour une heure spécifique en lançant la commande

echo "<command>" | at HH:MM

qui fonctionne parce que at est alimenté par stdin par défaut. Une approche plus simple consiste à exécuter les commandes répertoriées dans un fichier. Un fichier peut être exécuté en utilisant la commande -f suivi du nom du script à exécuter comme suit :

at -f /path/to/file HH:MM

La mise en place de l'ensemble

Ce qui suit suppose que atrun est activée. À titre d'exemple, disons que je souhaite quitter Mail et mettre l'ordinateur en veille à 23 heures. Je créerais un fichier contenant les commandes que je veux exécuter comme suit :

osascript -e 'tell application "Mail" to quit'
pmset sleepnow

Enregistrez ce fichier dans quit-and-sleep puis exécutez en ligne de commande

at -f /path/to/quit-and-sleep 23:00

Mises en garde

Je n'ai procédé à aucune vérification pour m'assurer que Mail était effectivement fermé. Le script suppose également que rien d'autre ne va entraver la mise en veille de l'ordinateur. Je l'ai gardé simple ici comme point de départ pour ce que vous voulez.

2voto

Vous pouvez programmer un événement une fois avec au :

at 23:59 <<< 'osascript -e "quit app \"Mail\""; pmset sleepnow'

Ou pour programmer une répétition quotidienne, modifiez la crontab avec EDITOR=nano crontab -e et ajoutez une entrée comme celle-ci :

59 23 * * * osascript -e 'quit app "Mail"'; pmset sleepnow

1voto

Paul Skinner Points 31

Voici une version strictement applescript qui accomplit cette tâche à partir d'une valeur de temps codée en dur. Vous pouvez bien sûr rendre cette partie interactive si vous le souhaitez. De plus, cette version suppose que la chaîne de temps se rapporte à aujourd'hui.

--Get time setting for action to occur
set t to "3:16:30 PM"
--build a time string to use as a target.
set cd to (current date) as text
set AppleScript's text item delimiters to " "
set targetTime to text items 1 thru -3 of cd
set targetTime to date ((targetTime as text) & " " & t)

repeat while (current date) < targetTime
    beep
    delay 30 -- check the time every 30 seconds
end repeat

tell application "Mail"
    quit
end tell

tell application "Finder"
    display dialog "Do you want to shut the computer down now?"
    if button returned of the result is "Ok" then
        shutdown
    end if
end tell

0voto

stringnome Points 165

Voici un code qui attendra un certain nombre de secondes avant de quitter l'application en cours et de se mettre en veille.

delay (your amount of seconds here)
tell application "System Events"
    key down {command}
    keystroke "q"
    key up {command}
    set volume "1"
    say "computer going to sleep"
    tell application "Finder"
        sleep
    end tell
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