以编程方式启用辅助设备的访问权限

时间:2010-06-01 13:28:10

标签: objective-c cocoa scripting accessibility accessibility-api

我想以编程方式在“系统偏好设置”中为辅助设备启用Access。但问题是我的应用程序没有以root用户身份运行,我不希望我的应用程序是root用户,也不应该要求任何身份验证。

我想全局点击所有键盘事件。我正在使用CGEventTapCreate()。在CGEventTapCreate()API的文档中,提到了,如果满足下列条件之一,则事件抽头接收密钥和密钥事件:

  1. 当前进程以root用户身份运行。
  2. 启用辅助设备访问。在Mac OS X v10.4&稍后,您可以使用“系统偏好设置”,“通用访问”面板,“键盘视图”启用此功能。
  3. 我通过检查系统首选项中的辅助设备的启用访问来手动尝试,它给了我预期的输出。

    那么有没有办法通过程序执行相同的操作而不需要身份验证,而且应用程序也不是以root用户身份运行?

    谢谢,

    Dheeraj。

4 个答案:

答案 0 :(得分:6)

您可以运行Applescript(或将Applescript转换为ScriptingBridge或AppleEvents上的Objective-C层)

这是我在一个特定项目中使用的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

答案 1 :(得分:4)

好的你们所有的解决方案/一些背景信息can be found at this address ..

  

因此,Apple在Tiger中提出了另一个解决这些问题的解决方案:神奇功能 AXMakeProcessTrusted 。这将使API 仅适用于您的应用程序,需要从以root身份运行的进程调用,因此它是安全的。它也都是自动的,因此除了询问用户他/她的密码之外,用户不需要做任何事情。   问题是似乎没有人使用它。我见过的每个第三方应用程序甚至Automator都要求用户手动选中“系统偏好设置”中的框。这是更多的工作实现,并有一个巨大的无证错误(应用程序必须重新启动它实际上可信任更新:报告为#5711990),但我真的认为人们应该使用它。所以,我想我会发布代码,以便在您的应用中轻松实现它。它包括一个帮助代理,你应该能够放入你的项目。

答案 2 :(得分:3)

如果没有明确要求许可,更改用户的系​​统设置而不至少告诉他们通常被认为是粗鲁的。大多数需要此设置的应用只是检查它是否启用,如果没有,请告诉用户将其打开。

答案 3 :(得分:0)

  

有一种方法可以在每个进程的基础上启用它。不幸的是我不知道它是什么,我有应用程序这样做,我想我记得在可可开发邮件列表上看到它的东西

您确定可以在每个进程的基础上启用它,而无需拥有管理员权限吗?如果是,所有事件都将被捕获,还是只有属于该过程的事件?