7

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

我想全局点击所有键盘事件。我也在使用 CGEventTapCreate()。在 CGEventTapCreate() API 的文档中提到,如果以下条件之一为真,则事件点击接收按键向上和按键向下事件:

  1. 当前进程以 root 用户身份运行。
  2. 启用辅助设备访问。在 Mac OS X v10.4 及更高版本中,您可以使用系统偏好设置、通用访问面板、键盘视图启用此功能。

我通过从系统偏好设置中检查辅助设备的启用访问来手动尝试,它给了我预期的输出。

那么有没有办法通过程序来做同样的事情而不要求身份验证并且应用程序也没有以root用户身份运行?

谢谢,

迪拉杰。

4

4 回答 4

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
于 2010-06-01T15:12:34.047 回答
4

好的,您可以在此地址找到所有解决方案/一些背景信息..

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

于 2012-04-29T11:55:29.740 回答
3

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

于 2010-06-01T19:17:43.837 回答
0

有一种方法可以在每个进程的基础上启用它。不幸的是,我不知道它是什么,我有执行此操作的应用程序,我想我记得在可可开发邮件列表上看到过一些关于它的内容

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

于 2010-08-09T14:26:27.427 回答