Ошибка при повороте экрана с помощью Applescript - PullRequest
0 голосов
/ 20 октября 2019

Я использую следующий скрипт для автоматического поворота моего портативного монитора.

tell application "System Preferences"
    reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
end tell

tell application "System Events" to tell process "System Preferences" to tell window "ASUS MB16AC"
    click radio button "Display" of tab group 1
    click pop up button "Rotation:" of tab group 1
    click menu item "90°" of menu 1 of pop up button "Rotation:" of tab group 1
    set success to 0
    repeat until success is equal to 1
        delay 1
        try
            tell sheet 1
                click button "Confirm"
                set success to 1
            end tell
        on error errText
            log errText
            delay 1
        end try
    end repeat
end tell

quit application "System Preferences"

При вызове скрипта с osascript на Терминале я получаю следующее сообщение об ошибке, но код все равно выполняет свою работу.

System Events got an error: Can’t get sheet 1 of window "ASUS MB16AC" of process "System Preferences". Invalid index.

Как избежать этой ошибки?

-----

Дополнительная информация:

Сценарий работал без ошибки при запуске под Script Editor.

Ошибка возникла только тогда, когда я выполняю скрипт из терминала, используя osascript.

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Следующий пример AppleScript code - это то, как я должен его кодировать, и это работает для меня, как и в macOS High Sierra :

if running of application "System Preferences" then
    try
        tell application "System Preferences" to quit
    on error
        do shell script "killall 'System Preferences'"
    end try
end if

repeat while running of application "System Preferences" is true
    delay 0.1
end repeat

tell application "System Preferences"
    reveal anchor "displaysDisplayTab" of pane "com.apple.preference.displays"
end tell

tell application "System Events" to tell process "System Preferences" to tell window 1
    click pop up button 1 of tab group 1
    click menu item 2 of menu 1 of pop up button 1 of tab group 1
    repeat until exists sheet 1
        delay 0.5
    end repeat
    click button 1 of sheet 1
    delay 0.1
end tell

tell application "System Preferences" to quit

Примечание: пример AppleScript код - это только то, что без * 1020Обработка * error не содержит какой-либо дополнительной обработки error , которая может быть подходящей. Пользователь должен добавить любую обработку ошибок , которая может быть уместной, необходимой или желаемой. Взгляните на оператор try и error оператор в Руководство по языку AppleScript . См. Также Работа с ошибками .

1 голос
/ 20 октября 2019

Проверьте, существует ли лист, прежде чем пытаться нажать кнопку, например:

repeat until success is equal to 1
    delay 1
    if exists sheet 1 then
        try
            tell sheet 1
                click button "Confirm"
                set success to 1
            end tell
        on error errText
            log errText
            delay 1
        end try
    end if
end repeat

С этим блоком if exists вам, вероятно, даже не понадобится блок try.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...