Использование Applescript для изменения системных настроек

Итак, я нашел этот вопрос, и это в основном решает мою проблему, но я хочу сделать больше, чем просто флажок, для моего варианта, то есть для включения клавиш мыши, вам также необходимо перемещаться по подменю и прочее. Я зашел так далеко:

tell application "System Preferences"
     activate
     delay 2
     set the current pane to pane id "com.apple.preference.universalaccess"
     delay 2
     #More Code here to select submenu "Pointer Controls", "Alternative Control Methods" and click the checkbox "Enable Mouse Keys"
end tell

Если вы спрашиваете, почему я просто не включил опцию включения клавиш мыши с помощью 5 щелчков кнопки выбора с помощью

 tell application "System Events"
      repeat 5
           key code 58 #key code for the option key
           delay 0.05
      end repeat
 end tell

Я так пробовал, просто не работает.


person gurkensaas    schedule 01.05.2021    source источник
comment
Поскольку вы не указали, какую версию macOS вы используете и какие другие настройки вы пытаетесь изменить, я опубликовал пример AppleScript код, который после раскомментирования правильно работает для меня в macOS Catalina и может потребовать некоторых изменений для других версий macOS. Такова природа сценариев пользовательского интерфейса, поскольку они могут быть неудобными, а иерархическая структура элементов пользовательского интерфейса может изменяться в разных версиях macOS. .   -  person user3439894    schedule 02.05.2021


Ответы (1)


Показанный ниже пример AppleScript код был протестирован в macOS Catalina с языком и регионом в Системных настройках установлено значение Английский (США) — основной, и у меня он работал без проблем1.

  • 1 Предполагается, что в Системных настройках установлены необходимые и подходящие настройки › Безопасность и конфиденциальностьКонфиденциальность установлены/ адресовано по мере необходимости.

Обратите внимание, что различные события закомментированы, поэтому вы можете раскомментировать нужные.

Пример AppleScript код:

--  # Check to see if System Preferences is 
--  # running and if yes, then close it.
--  # 
--  # This is done so the script will not fail 
--  # if it is running and a modal sheet is 
--  # showing, hence the use of 'killall' 
--  # as 'quit' fails when done so, if it is.
--  #
--  # This is also done to allow default behaviors
--  # to be predictable from a clean occurrence.

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

--  # Make sure System Preferences is not running before
--  # opening it again. Otherwise there can be an issue
--  # when trying to reopen it while it's actually closing.

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

tell application "System Preferences"
    reveal anchor "Alternate_Pointer_Actions" of ¬
        pane id "com.apple.preference.universalaccess"
    activate -- # Is needed because of 'sheet 1'.
end tell

tell application "System Events"
    tell application process "System Preferences"
        tell window 1
            
            set i to 0
            repeat until (exists checkbox 1 of tab group 1 of group 1)
                delay 0.1
                set i to i + 1
                if i ≥ 30 then return
            end repeat
            
            tell tab group 1 of group 1
                -- if (value of checkbox 1 as boolean) then click checkbox 1 -- # "Enable Mouse Keys"
                -- if not (value of checkbox 1 as boolean) then click checkbox 1 -- # "Enable Mouse Keys"
                -- click checkbox 1 --  # "Enable Mouse Keys"
                -- click button 1 --    # "Options…"
            end tell
            
            set i to 0
            repeat until (exists sheet 1)
                delay 0.1
                set i to i + 1
                if i ≥ 30 then return
            end repeat
            
            tell sheet 1
            
                --  # [] Ignore built-in trackpad when Mouse Keys is on
                -- if (value of checkbox 1 as boolean) then click checkbox 1
                -- if not (value of checkbox 1 as boolean) then click checkbox 1
                -- click checkbox 1

                --  # [] Press the Option key five times to toggle Mouse Keys
                if (value of attribute "AXEnabled" of checkbox 2) then
                    -- if (value of checkbox 2 as boolean) then click checkbox 2
                    -- if not (value of checkbox 2 as boolean) then click checkbox 2
                    -- click checkbox 2
                end if
                
                --  # Initial Delay:
                -- set value of slider 1 to 3 --    # Valid values, as a whole number: 0 thru 4
                
                --  # Maximum Speed:
                -- set value of slider 2 to 6 --    # Valid values, as a whole number: 0 thru 10
                
                -- click button 1 --    # "OK"
                -- click button 2 --    # "Cancle"
                
            end tell
            
        end tell
    end tell
end tell

tell application "System Preferences" to quit

Примечания:

В tell sheet 1 блоке он закодирован с помощью [] Игнорировать встроенный трекпад, когда включена кнопка мыши флажок, так как его проверка также проверяет < strong>[] Нажмите клавишу Option пять раз, чтобы переключить клавиши мыши флажок и отключить его. Вам также может понадобиться добавить некоторую дополнительную логику в зависимости от того, как именно вы пытаетесь переключить состояние этих флажков.


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

person user3439894    schedule 02.05.2021
comment
Большое спасибо, я использую бета-версию MacOS Big Sur 11.4, и, похоже, она работает нормально, за исключением того, что на самом деле она не нажимает на поле, которое включает клавиши мыши, это проблема в вашем скрипте или в моей ОС? Кроме того, после этого он фактически не выходит из Системных настроек. - person gurkensaas; 02.05.2021
comment
@gurkensaas, Во-первых, я хочу сказать, что Apple что-то изменила в Системных событиях, и теперь она сообщает об ошибке «Приложение не запущено». число -600 из системных событий приложения с некоторым кодом, который безупречно работает в macOS Catalina, но в случае, когда иерархическая структура элементов пользовательского интерфейса в macOS Big Sur точно так же, он может привести к ошибке при первом запуске script. Все еще работаем над отслеживанием того, что именно вызывает проблему, однако обходной путь с использованием tell application "System Events" to activate и delay 0.5, похоже, решает проблему. - person user3439894; 02.05.2021
comment
@gurkensaas, Тем не менее... Как я уже говорил в комментарии, я разместил некоторый пример AppleScript код, который, когда он раскомментирован, правильно работает для меня в macOS Catalina и, возможно, потребуются некоторые изменения для других версий macOS. Я забыл сказать... Возможно, потребуются некоторые изменения, если у вас нет < b>встроенный трекпад, который в этом случае для [] Нажмите клавишу Option пять раз, чтобы переключить клавиши мыши флажок становится checkbox 1. Самое главное, вы должны раскомментировать соответствующие строки кода в зависимости от того, что вы хотите, чтобы это произошло. - person user3439894; 02.05.2021
comment
Я просто забыл раскомментировать код, мне ужасно жаль потраченного времени, скрипт работает без нареканий. - person gurkensaas; 02.05.2021