我相信大多数人都熟悉 Alfred,这是一款很棒的任务启动器。我想知道的是 Alfred 如何检测到我正在按下 Command-Shift-Space 来启动它的 UI?它会覆盖“keyDown”还是完全不同的东西?
到目前为止,我看到的每一篇文章都谈到了覆盖keyDown
,但据我了解,覆盖必须是视图的一部分。Alfred 是如何在没有显示视图的情况下做到这一点的,而顶部只有菜单栏图标?
我不知道 Alfred 是否要求对可访问性访问信任它,或者您是否愿意要求您自己的应用程序是信任的。
-[NSEvent addGlobalMonitorForEventsMatchingMask:...]
无论哪种方式,您都可以使用旧的 Carbon 热键 API ,而不是使用其中一个或事件点击。它仍然没有被弃用,尽管 Carbon 的其余大部分已经被弃用。请参阅RegisterEventHotKey()。
您可以使用NSEvent来监控全局按键。
您还可以创建一个全局事件监视器,允许您监视其他应用程序中的事件,尽管您无法更改这些事件。
具体来说,看看addGlobalMonitorForEventsMatchingMask:handler:
,它安装了一个事件监视器,它接收发布到其他应用程序的事件副本。
+ (id)addGlobalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(void (^)(NSEvent*))block
事件异步传递到您的应用程序,您只能观察事件;您不能修改或以其他方式阻止将事件传递到其原始目标应用程序。
仅当启用了可访问性或您的应用程序受信任以进行可访问性访问时,才可能监视与密钥相关的事件(请参阅 AXIsProcessTrusted)。
如果您确实想阻止或修改事件,则应改为查看CGEvent。