【发布时间】:2013-07-15 15:06:29
【问题描述】:
我想在 10.9 上以编程方式启用对辅助设备的访问。在 10.8 及更低版本中,我使用以下 Applescript 来启用辅助设备的访问权限:
tell application "System Events"
if UI elements enabled is false then
set UI elements enabled to true
end if
end tell
在 10.9 中,Apple 已将辅助功能选项移至系统偏好设置 ➞ 安全和隐私 ➞ 隐私 ➞ 辅助功能。与以前版本的 OS X 不同,它为所有应用程序使用通用复选框,10.9 中的新功能允许用户单独选择哪些应用程序可以控制系统以执行其各种脚本功能。
Apple 尚未向开发人员提供任何 API 以通过编程方式启用应用的可访问性。因此,当应用程序使用辅助功能 API 时,Mac OS 10.9 将提示最终用户许可启用辅助功能的对话框。此外,用户必须在启用辅助功能后重新启动应用程序。
我们能否在 10.9 上使用 Applescript 或任何其他 API 以编程方式启用对辅助设备的访问?任何解决此问题的帮助将不胜感激。
【问题讨论】:
-
不,没有办法避免访问此屏幕的需要。它是操作系统的基本保护之一。几乎可以肯定的是,任何可以规避此问题的方法都会被修补。
-
我认为这是无法规避的非常故意的行为。当您可以访问辅助功能时,您可以从文本框中复制文本,随机单击内容,并且通常会做一些非常粗略的事情。虽然这些东西在某些应用程序中非常有用,但他们不希望它在用户不知情的情况下发生。但这显然是他们的沙盒努力使事情更“安全”的副作用
-
你可以“接受”它或不接受它,但这就是它的方式。我同意原始评论者的观点,如果您确实找到了规避此问题的方法,它将尽快被淘汰。
-
@KeithSmiley:
AXIsTrustedProcess()确实会在安全和隐私首选项中选中应用程序的复选框后立即开始报告“是”:但在我的测试中,新的事件点击仍然会默默地无法点击 keyup /keydown 事件,直到进程重新启动。 (这与AXMakeProcessTrusted()过去的工作方式一致。) -
@rjobidon 我(终于!)发现您可以将应用程序从应用程序文件夹拖到列表中。 zoul 对此问题的回答中介绍了触发“...想要控制这台计算机”对话框。
标签: objective-c macos cocoa accessibility accessibility-api