Выйти из всех приложений, используя Applescript?
Как бы мне закрыть все запущенные пользовательские приложения, использующие Applescript?
5 ответов
Решение
Все в порядке... Я думаю, что нашел свой ответ:
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
После некоторого поиска, я нашел лучший подход:
- Оно использует
background only
построить начальный список приложений, а неvisible is true
, Разница в том, что другие скрипты не смогут выйти из приложения, которое было скрыто с помощью ⌘H. - Он предоставляет список исключений, так что, например, вы можете запретить редактору сценариев выходить при каждом тестировании сценария.
Адаптировано из ветки на 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
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
Да, но имена процессов могут не совпадать с именами приложений. Поэтому лучше и безопаснее работать с постоянными идентификаторами пакетов приложений:
property white_list : {"com.apple.finder", "com.latenightsw.ScriptDebugger8"}
tell application "System Events"
set bundleIDs to bundle identifier of processes whose background only is false
end tell
repeat with theID in bundleIDs
if theID is not in white_list then tell application id theID to quit
end repeat