没有帮助的热键CGEventTap

时间:2015-08-30 18:28:37

标签: objective-c macos core-graphics

我使用了addLocal,它可以在我的应用程序中运行,但我想全局观看,所以我尝试addGlobalMonitorForEventsMatchingMask:handler:,但NSEventKeyDown根本没有被触发。显然它需要启用辅助权限。

我可以在全球范围内观看NSScrollWheel事件。这很有趣。

在我花了很多时间进入同样的障碍之前,我希望先问一下,是否会使用CGEventTap监控关键事件的全局工作而不启用附加功能?

https://developer.apple.com/library/mac/documentation/Carbon/Reference/QuartzEventServicesRef/index.html#//apple_ref/c/tdef/CGEventTapLocation

我还将探索其他方法,但非常好奇(关于学习)关于CGEventTap是否全局工作没有问题。他似乎暗示这可行,但评论显示有些混乱:https://stackoverflow.com/a/9345536/1828637

我将使用的其他方法也包括Carbon API。

1 个答案:

答案 0 :(得分:3)

CGEventTap要求辅助设备权限与全局事件监视器具有相同的访问权限。来自CGEventTapCreate()的文档:

  

如果出现以下情况之一,事件点击会接收按键事件和按键事件   条件是真的:

     
      
  • 当前进程以root用户身份运行。

  •   
  • 启用辅助设备访问。在OS X v10.4中,您可以使用“系统偏好设置”,“通用访问”面板启用此功能,   键盘视图。

  •   

我建议使用旧的Carbon RegisterEventHotKey()机制。它仍然没有被弃用,可用于64位。这与碳的大部分形成鲜明对比。基本上,Apple认识到没有适当的替代品。