7

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

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

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

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

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

Thanks,

Dheeraj.

ответ

6

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

Вот 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 
3

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

+0

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

+0

И как вы проверяете, разрешено ли это программно? – Chetan

0

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

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

4

Ok y'all решение/некоторая справочная информация can be found at this address ..

Так, Apple придумал другое решение, в Tiger, который решает эти проблемы: волшебной функции AXMakeProcessTrusted. Это позволит API просто для вашего приложения и его нужно вызывать из процесса, выполняемого с правами администратора, поэтому он защищен. Это также все автоматическое, поэтому, не спрашивая пользователя о его/ее пароле, пользователю ничего не нужно делать. Проблема в том, что, похоже, никто ее не использует. Каждое стороннее приложение, которое я видел, и даже Automator просто просит пользователя вручную установить флажок в Системные настройки.Это большая работа для реализации и имеет одну огромную недокументированную ошибку (приложение должно быть перезаписано до того, как оно действительно будет проверено Update: указано как # 5711990), но я действительно думаю, что люди должны его использовать. Итак, я думал, что выпустил бы код, чтобы было легко реализовать его в вашем приложении. Он включает вспомогательный агент, который вы сможете просто добавить в свой проект.

+0

Этот должен быть установлен как правильный ответ. –

+0

К сожалению, заархивированный пост в блоге не содержит пример кода. – JWWalker

+0

Это не работает в mavericks –