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

Я хочу включить Доступ для вспомогательных устройств в Установках системы программно. Но проблема состоит в том, что мое приложение не работает, поскольку пользователь root и я не хотим, чтобы мое приложение было как пользователь root и также не должны просить промежуточную аутентификацию.

Я хочу коснуться всех событий клавиатуры глобально. Я использую CGEventTapCreate () для того же. В документации CGEventTapCreate () API упоминается, что, касания События получают, настраивают и ключ вниз события, если одно из следующих условий верно:

  1. Текущий процесс работает как пользователь root.
  2. Доступ для вспомогательных устройств включен. В Mac OS X v10.4 и позже, можно активировать эту опцию с помощью Установок системы, панели Universal Access, представления Keyboard.

Я попробовал вручную путем проверки Разрешать Доступа на вспомогательные устройства от Системного Предпочтения, и это дает мне ожидаемый вывод.

Таким образом, там какой-либо путь состоит в том, чтобы сделать то же с помощью программы, не прося аутентификацию, и также приложение не работает как пользователь root?

Спасибо,

Dheeraj.

7
задан Nick Haddad 21 November 2010 в 02:58
поделиться

3 ответа

Вы можете запустить Applescript (или перевести Applescript в ScriptingBridge или любой другой уровень Objective-C поверх AppleEvents)

Вот Applescript, который я использую в одном конкретном проекте, который что-то делает аналогично тому, что вам нужно:

on isUIScriptingOn()
    tell application "System Events" to set isUIScriptingEnabled to UI elements enabled
    return isUIScriptingEnabled
end isUIScriptingOn

on turnUIScriptingOn(switch)
    tell application "System Events"
        activate
        set UI elements enabled to switch
    end tell
end turnUIScriptingOn

on run
    if not isUIScriptingOn() then
        display dialog "Enable Access for assistive devices (found in the Universal Access System Preference) must be on for this software to correctly work. This program will enable this setting for you"
        turnUIScriptingOn(true)
        display dialog "Access for assistive devices in now on"
    end if
end run
6
ответ дан 6 December 2019 в 19:33
поделиться

Обычно считается невежливым изменять системные настройки пользователя, хотя бы не предупредив его, а то и не спросив разрешения. Большинство приложений, которым нужна эта настройка, просто проверяют, включена ли она, и если нет, говорят пользователю включить ее.

3
ответ дан 6 December 2019 в 19:33
поделиться

Есть способ включить его для каждого процесса. К сожалению, я не знаю, что это такое, у меня есть приложения, которые делают это, и я думаю, что помню, что видел что-то об этом в списке рассылки разработчиков какао

. Вы уверены, что его можно включить для каждого процесса, без нужны права администратора? И если да, будут ли захвачены все события или только те, которые относятся к процессу?

0
ответ дан 6 December 2019 в 19:33
поделиться