我敢肯定大多数人都熟悉阿尔弗雷德这个令人敬畏的任务发射器。我想知道的是Alfred如何检测到我正在按下Command-Shift-Space来启动它的UI?它是否覆盖`keyDown'或完全不同的东西?
到目前为止,我所看到的每篇帖子都谈到了覆盖keyDown
,但根据我的理解,该覆盖必须是视图的一部分。阿尔弗雷德如何在没有展示视图的情况下做到这一点,顶部只有菜单栏图标?
答案 0 :(得分:0)
您可以使用NSEvent来监控全局按键。
您还可以创建一个全局事件监视器,它允许您监视其他应用程序中的事件,但您无法更改这些事件。
具体来说,请查看addGlobalMonitorForEventsMatchingMask:handler:
,它会安装一个事件监视器,用于接收发布到其他应用程序的事件副本。
+ (id)addGlobalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(void (^)(NSEvent*))block
事件以异步方式发送到您的应用程序,您只能观察事件;您无法修改或以其他方式阻止将事件传递到其原始目标应用程序。
如果启用了辅助功能,或者您的应用程序受信任以进行辅助功能访问,则只能监视与键相关的事件(请参阅AXIsProcessTrusted)。
如果您确实想要阻止或修改事件,则应该查看CGEvent。
答案 1 :(得分:0)
我不知道Alfred是否要求信任可访问性,或者您是否愿意要求自己的应用程序。
无论哪种方式,您都可以使用旧的Carbon热键API,而不是使用-[NSEvent addGlobalMonitorForEventsMatchingMask:...]
或事件点击。它仍然没有被弃用,尽管剩下的大部分是碳。请参阅RegisterEventHotKey()。