我希望以编程方式启用对系统首选项中辅助设备的访问。但问题是,我的应用程序不是以根用户的身份运行的,我不希望我的应用程序是根用户,也不应该在两者之间请求任何身份验证。
我想点击全球所有键盘事件。我使用CGEventTapCreate()作为same.In文档-- CGEventTapCreate() API的文档--这里提到,如果下列条件之一为真,事件点击将接收键向上和下键事件:
我通过检查来自系统首选项的辅助设备的启用访问来手动尝试,它给了我预期的输出。
那么,是否有任何方法可以在不请求身份验证的情况下执行同样的via程序,并且应用程序也不是以root用户的身份运行?
谢谢,
Dheeraj
发布于 2010-06-01 15:12:34
您可以运行Applescript (或将Applescript转换为ScriptingBridge或任何目标-C层在AppleEvents上)
下面是我在一个特定项目中使用的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发布于 2012-04-29 11:55:29
好的,你的解决方案/一些背景信息可以在这个地址找到..。
因此,苹果在Tiger中提出了另一个解决这些问题的解决方案:神奇的函数AXMakeProcessTrusted.这将只为您的应用程序启用API ,并且需要从以根用户身份运行的进程中调用,因此它是安全的。它也是自动的,所以除了询问用户的密码之外,用户没有什么需要做的。问题是似乎没有人使用它。我看到的每一个第三方应用程序,甚至Automator都只是要求用户手动选中系统首选项中的框。这是更多的工作要实现,并有一个巨大的无文档错误(应用程序必须重新启动之前,它是真正可信的更新:报告为#5711990),但我真的认为人们应该使用它。因此,我想我应该发布代码,以便在您的应用程序中实现它。它包括一个助手代理,您应该能够将它放到项目中。
发布于 2010-06-01 19:17:43
更改用户的系统设置通常被认为是粗鲁的,如果没有明确请求许可的话,至少不告诉他们。大多数需要此设置的应用程序只需检查是否启用,如果没有,则告诉用户打开它。
https://stackoverflow.com/questions/2950124
复制相似问题