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

我想点击全球所有键盘事件。我使用 CGEventTapCreate() 进行相同的操作。在 CGEventTapCreate() API 的文档中提到,如果满足以下条件之一,事件点击会接收按键向上和按键按下事件:

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

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

那么有没有什么方法可以通过程序执行相同的操作而不要求身份验证并且应用程序不以 root 用户身份运行?

谢谢,

迪拉杰。

有帮助吗?

解决方案

您可以运行一个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

其他提示

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

因此,苹果提出了解决这些问题的老虎解决方案:魔术功能 AxmakeProcesstrusted. 。这将启用API 仅适用于您的应用程序,需要从作为根运行的过程中调用它. 。它也是自动的,因此,除了向用户询问其密码外,用户无需执行任何操作。问题是似乎没人使用它。我见过的每个第三方应用程序,甚至自动配件都要求用户在系统首选项中手动选中该框。实施的工作是更多的工作,并且有一个巨大的无证件错误(必须重新启动该应用程序,然后才能真正被信任的更新:报告为#5711990),但我真的认为人们应该使用它。因此,我认为我会发布代码,以使其易于在您的应用中实现。它包括一个助手代理,您应该可以进入项目。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top