Изменение направления прокрутки трекпада с помощью AppleScript в Yosemite

Я предпочитаю «естественное» направление прокрутки при использовании трекпада MBAir, но «неестественное» при использовании мыши. Я часто переключаюсь туда и обратно в зависимости от того, где я работаю, поэтому я использовал немного AppleScript для переключения настроек. Этот скрипт перестал работать, когда я обновился до Mac OS Yosemite. Он по-прежнему открывает панель «Прокрутка и масштабирование» настроек трекпада, но не устанавливает флажок. Я пробовал несколько вещей, но не могу заставить их работать. Я не разработчик Apple, поэтому у меня нет инструментов отладки. Какие-нибудь советы?

try
    tell application "System Preferences"
        activate
        set current pane to pane "com.apple.preference.trackpad"
    end tell

    tell application "System Events"
        tell process "System Preferences"
            click radio button "Scroll & Zoom" of tab group 1 of window "Trackpad"
            click checkbox 1 of tab group 1 of window "Trackpad"
        end tell
    end tell
end try

Ответы (8)

Во-первых, убедитесь, что у Applescripts есть разрешение на изменение приложений. Это можно сделать, открыв System Preferences | Security & Privacy | Accessibilityи проверив Script Editor . Это одноразовый процесс, и вам не нужно проверять его снова.

Я запустил тот же фрагмент, который @Bowen предоставил в своем вопросе о Мохаве, и заметил то, что он описал. Я исправил это, добавив задержку, упомянутую @Bowen в его ответе. Теперь, когда мы добавили небольшую задержку, флажок будет либо установлен, либо снят.

Вот тот пример, который я запустил прямо из редактора скриптов:

try
tell application "System Preferences"
    activate
    set current pane to pane "com.apple.preference.trackpad"
end tell
delay 2
tell application "System Events"
    tell process "System Preferences"
        click radio button "Scroll & Zoom" of tab group 1 of window "Trackpad"
        click checkbox 1 of tab group 1 of window "Trackpad"
        tell application "System Preferences" to quit
    end tell
end tell
end try

Кроме того, в отношении этой темы я создал кое-что, используя идеи из этой темы, поскольку люди могут захотеть автоматизировать это в соответствии со своими настройками. Приведенный ниже сценарий «готов к работе с Automator» или может быть экспортирован как приложение, чтобы вы могли запускать его при запуске или как вы хотите. Вы также должны разрешить доступ к экспортированному приложению, как показано на изображении выше для «Кликера направления прокрутки». Это характерно для найденной мыши Logitech, но ее можно легко изменить на любой другой тип шнура/мыши. Его также можно использовать как достойную ссылку для построения направления прокрутки. Я, например, устал переключать направление прокрутки при переходе от мыши к трекпаду, и именно так я нашел эту тему.

Адаптирован для экспорта в виде приложения из редактора сценариев.

try
    set logitech to "Logitech"
    try
        set scriptOutput to do shell script "system_profiler SPUSBDataType | grep -i logitech"
        if scriptOutput contains logitech then
            tell application "System Preferences"
                activate
                set current pane to pane "com.apple.preference.trackpad"
            end tell
            delay 2
            tell application "System Events"
                tell process "System Preferences"
                    set checkBoxOne to checkbox 1 of tab group 1 of window "Trackpad"
                    click radio button "Scroll & Zoom" of tab group 1 of window "Trackpad"
                    tell checkBoxOne to if value is 1 then click
                    tell application "System Preferences" to quit
                end tell
            end tell
        end if
    on error errMsg
        log errMsg
        tell application "System Preferences"
            activate
            set current pane to pane "com.apple.preference.trackpad"
        end tell
        delay 2
        tell application "System Events"
            tell process "System Preferences"
                set checkBoxOne to checkbox 1 of tab group 1 of window "Trackpad"
                click radio button "Scroll & Zoom" of tab group 1 of window "Trackpad"
                tell checkBoxOne to if value is 0 then click
                tell application "System Preferences" to quit
            end tell
        end tell
    end try
end try
Я использую ваш первый пример в службе Automator. Когда я запускаю его из другого приложения (скажем, Safari), в области «Безопасность и конфиденциальность» требуется, чтобы я предоставил этому приложению доступ для управления системными настройками и системными событиями. Я не обязательно хочу это делать и не хочу авторизовывать каждое приложение, которое у меня может быть открыто. Есть ли способ обойти это? У меня что-то не так настроено? Или это просто часть изменений безопасности Мохаве?
Я обновил свой ответ, чтобы показать, что вам нужно предоставить доступ только один раз. После этого вам не нужно постоянно делать это. Кроме того, насколько мне известно, вы не можете запускать скрипт/автоматизатор, не предоставив ему доступ, так как это проблема безопасности, и, одобрив его, вы соглашаетесь на этот риск, даже если это не рискованная программа.

Измените «активировать» на «запустить», чтобы скрипт работал в фоновом режиме. также добавьте «quit» в конец скрипта с задержкой 0,6, чтобы выйти из системных настроек после выполнения скрипта.

try
tell application "System Preferences"
    (run)
    set current pane to pane "com.apple.preference.trackpad"
end tell
tell application "System Events"
    tell process "System Preferences"
        delay 0.6
        click radio button "Scroll & Zoom" of tab group 1 of window "Trackpad"
        click checkbox 1 of tab group 1 of window "Trackpad"
    end tell

    tell application "System Preferences" to quit
end tell
end try
Спасибо за это! Я делаю небольшую программу-оболочку для выполнения этого. Мы добавим вас в качестве участника в репозиторий GitHub.
рад, что это помогло.

Вы можете решить это без какого-либо яблочного скрипта: https://pilotmoon.com/scrollreverser/

Я ответил на свой вопрос: если этот скрипт не работает, перейдите в «Системные настройки | Безопасность и конфиденциальность | Доступность и убедитесь, что редактор сценариев включен, чтобы разрешить Applescripts управлять графическим интерфейсом.

Это слегка измененная версия ответа , предоставленного @TODO, и она основана на этом ответе на связанный вопрос. Этот AppleScript будет переключать прокрутку напрямую молча/невидимо. Я сохраняю его как приложение и запускаю через прожектор всякий раз, когда переключаюсь между мышью и трекпадом.

try
    tell application "System Preferences"
        reveal pane "com.apple.preference.trackpad"
    end tell
    tell application "System Events"
        tell process "System Preferences"
            click radio button "Scroll & Zoom" of tab group 1 of window "Trackpad"
            click checkbox 1 of tab group 1 of window "Trackpad"
        tell application "System Preferences" to quit
        end tell
    end tell
end try

Отредактировано: я забыл упомянуть, что мне нужно один раз предоставить разрешение на доступ (при появлении запроса). После одноразовой подсказки это работает как шарм

Итак, что происходило, так это то, что код зацикливался, потому что код работал слишком быстро. Итак, что я сделал, так это поставил задержки между тем, где он не работал, и он работает отлично. Если вы хотите, вы можете уменьшить задержку до 0,5 или 0,2.

сказать приложению «Системные настройки» активировать установить текущую панель на панель «com.apple.preference.trackpad» конец сказать

сообщить приложению «Системные события» сообщить процессу «Системные настройки» задержка (1) нажать переключатель «Прокрутка и масштабирование» группы вкладок 1 окна «Трекпад» задержки (1) установить флажок 1 группы вкладок 1 окна «Трекпад» задержки (1) конец сказать конец рассказать

Я создал небольшое приложение MenuBar для Mac , чтобы автоматизировать это поведение ( Scrolly ). Какая разница, спросите вы, для scrollreverser . Приложение scrollreverser действительно хорошее, но его недостатком является то, что оно на самом деле не меняет настройки (что делает мое приложение, благодаря вам, ребята, и сценариям Apple, которыми все поделились в этой теме) .

Если хотите, можете заглянуть сюда и попробовать. Мин. требования: MacOS 11. Поскольку я хотел протестировать SwiftUI 2, мне пришлось увеличить мин. версия.

Вот что сработало для меня:

tell application "System Preferences"
    reveal anchor "trackpadTab" of pane id "com.apple.preference.trackpad"
end tell

tell application "System Events" to tell process "System Preferences"
    click checkbox 1 of tab group 1 of window 0
end tell

quit application "System Preferences"

Я позаимствовал код отсюда .