У меня есть простой applescript, скомпилированный как приложение, которое позволяет пользователю выбирать между перезапуском, завершением работы и т. д.
Это очень просто и отлично работает, но диалоговое окно подтверждения, отправленное ОС «Вы уверены, что хотите выключить компьютер сейчас?» с таймером, не является самым передним окном, поэтому пользователь должен щелкнуть внутри этого диалогового окна для активации, а затем нажать кнопку, которую он хочет.
Если бы это диалоговое окно подтверждения было самым передним окном, простая клавиша ввода подтвердила бы выбор. Любая идея о том, как вывести это диалоговое окно подтверждения наверх?
tell application "Finder"
set userChoice to my getChoixUser("list") -- choose from list
try
if (userChoice contains "Veille") then -- sleep
tell application "Finder" to sleep
else if (userChoice contains "Eteindre") then -- shut down
tell application "loginwindow" to «event aevtrsdn»
else if (userChoice contains "Redémarrer") then -- restart
tell application "loginwindow" to «event aevtrrst»
else if (userChoice contains "économiseur") then -- screen saver
tell application "System Events" to start current screen saver
end if
on error errMsg
beep
tell application "Finder" to display dialog errMsg buttons {"OK"} default button 1 with title scriptName with icon 0
end try
конец скажи
Удалите закрывающий блок Finder
tell и активируйте окно с помощью сценариев графического интерфейса.
set userChoice to getChoixUser("list") -- choose from list
try
if (userChoice contains "Veille") then -- sleep
tell application "Finder" to sleep
else if (userChoice contains "Eteindre") then -- shut down
tell application "loginwindow" to «event aevtrsdn»
focusLoginWindow()
else if (userChoice contains "Redémarrer") then -- restart
tell application "loginwindow" to «event aevtrrst»
focusLoginWindow()
else if (userChoice contains "économiseur") then -- screen saver
tell application "System Events" to start current screen saver
end if
on error errMsg
beep
tell application "Finder" to display dialog errMsg buttons {"OK"} default button 1 with title scriptName with icon 0
end try
on focusLoginWindow()
tell application "System Events" to tell process "loginwindow"
repeat until exists window 1
delay 0.2
end repeat
set attribute "AXFocused" of window 1 to true
end tell
end focusLoginWindow
Верно. Скрипт, скомпилированный как скрипт, и как приложение ведут себя по-разному. Я обновил ответ.
Удаление блока сообщения Finder ничего не меняет: кнопка диалога подтверждения по умолчанию по-прежнему «серая» и не реагирует на клавишу ввода. На самом деле, только с «указать приложению «loginwindow» на «event aevtrrst» и вернуться», проблема та же.