Comment quitter toutes les applications utilisateur en cours d'exécution à l'aide d'Applescript?Quittez toutes les applications en utilisant Applescript?
Répondre
Il est bien ... Je pense avoir trouvé ma réponse:
tell application "System Events" to set the visible of every process to true
set white_list to {"Finder"}
try
tell application "Finder"
set process_list to the name of every process whose visible is true
end tell
repeat with i from 1 to (number of items in process_list)
set this_process to item i of the process_list
if this_process is not in white_list then
tell application this_process
quit
end tell
end if
end repeat
on error
tell the current application to display dialog "An error has occurred!" & return & "This script will now quit" buttons {"Quit"} default button 1 with icon 0
end try
tell application "System Events" to set quitapps to name of every application process whose visible is true and name is not "Finder"
repeat with closeall in quitapps
quit application closeall
end repeat
Bienvenue sur Stackoverflow. Pourriez-vous prolonger un peu votre réponse pour expliquer comment cela résout le problème? – Daenarys
Ceci ferme toutes les applications visibles, à l'exception du finder, de manière à ce qu'il ne ferme pas d'autres processus en cours pouvant affecter les processus d'arrière-plan de l'ordinateur. – Jeff
tell application "System Events" to set the visible of every process to true
set white_list to {"Finder"}
try
tell application "Finder"
set process_list to the name of every process whose visible is true
end tell
repeat with i from 1 to (number of items in process_list)
set this_process to item i of the process_list
if this_process is not in white_list then
tell application this_process
quit
end tell
end if
end repeat
on error
tell the current application to display dialog "An error has occurred!" & return & "This script will now quit" buttons {"Quit"} default button 1 with icon 0
end try
Après quelques googler, j'ai trouvé une meilleure approche:
- Il utilise
background only
pour construire la liste des applications initiale, plutôt quevisible is true
. La différence est que les autres scripts échouent pour quitter une application cachée avec ⌘H. - Il fournit une liste d'exclusions afin que, par exemple, vous puissiez empêcher votre éditeur de script de de quitter chaque fois que vous testez le script.
Adapté de a thread on MacScripter.
-- get list of open apps
tell application "System Events"
set allApps to displayed name of (every process whose background only is false) as list
end tell
-- leave some apps open
set exclusions to {"AppleScript Editor", "Automator", "Finder", "LaunchBar"}
-- quit each app
repeat with thisApp in allApps
set thisApp to thisApp as text
if thisApp is not in exclusions then
tell application thisApp to quit
end if
end repeat
Très bonnes choses. Une chose à noter est que le système d'exploitation (au moins sur 10.7.4) active automatiquement Finder - avec des fenêtres non minimisées montrant - une fois la dernière application se ferme. Si vous préférez une vue propre de votre bureau, vous pouvez réduire toutes les fenêtres du Finder, dites à l'application "Evénements système" de cliquer sur le premier bouton de chaque fenêtre du processus "Finder" dont la description est "minimiser"), et/ou fermez-les tous, "tell application" Finder "pour fermer chaque fenêtre". Si vous les fermez, les minimiser d'abord empêche le scintillement. – mklement0
Lors de l'utilisation de la propriété 'name' de la classe de processus _usually_ works, il existe des applications pour lesquelles cette valeur diffère du nom de l'application affiché dans l'interface utilisateur et tel qu'il est compris par l'instruction' tell application'. Par conséquent, il est préférable d'utiliser la propriété 'display name' (bien qu'il puisse encore y avoir des cas où même cela ne fonctionne pas). Ainsi, la ligne pertinente ci-dessus devrait être 'set process_list 'pour le nom affiché de chaque processus dont le visible est vrai'. – mklement0