我使用了addLocal
,它可以在我的应用程序中运行,但我想全局观看,所以我尝试addGlobalMonitorForEventsMatchingMask:handler:
,但NSEventKeyDown
根本没有被触发。显然它需要启用辅助权限。
我可以在全球范围内观看NSScrollWheel事件。这很有趣。
在我花了很多时间进入同样的障碍之前,我希望先问一下,是否会使用CGEventTap
监控关键事件的全局工作而不启用附加功能?
我还将探索其他方法,但非常好奇(关于学习)关于CGEventTap是否全局工作没有问题。他似乎暗示这可行,但评论显示有些混乱:https://stackoverflow.com/a/9345536/1828637
我将使用的其他方法也包括Carbon API。
答案 0 :(得分:3)
CGEventTap
要求辅助设备权限与全局事件监视器具有相同的访问权限。来自CGEventTapCreate()
的文档:
如果出现以下情况之一,事件点击会接收按键事件和按键事件 条件是真的:
当前进程以root用户身份运行。
启用辅助设备访问。在OS X v10.4中,您可以使用“系统偏好设置”,“通用访问”面板启用此功能, 键盘视图。
我建议使用旧的Carbon RegisterEventHotKey()
机制。它仍然没有被弃用,可用于64位。这与碳的大部分形成鲜明对比。基本上,Apple认识到没有适当的替代品。