0

我相信大多数人都熟悉 Alfred,这是一款很棒的任务启动器。我想知道的是 Alfred 如何检测到我正在按下 Command-Shift-Space 来启动它的 UI?它会覆盖“keyDown”还是完全不同的东西?

到目前为止,我看到的每一篇文章都谈到了覆盖keyDown,但据我了解,覆盖必须是视图的一部分。Alfred 是如何在没有显示视图的情况下做到这一点的,而顶部只有菜单栏图标?

4

2 回答 2

0

我不知道 Alfred 是否要求对可访问性访问信任它,或者您是否愿意要求您自己的应用程序是信任的。

-[NSEvent addGlobalMonitorForEventsMatchingMask:...]无论哪种方式,您都可以使用旧的 Carbon 热键 API ,而不是使用其中一个或事件点击。它仍然没有被弃用,尽管 Carbon 的其余大部分已经被弃用。请参阅RegisterEventHotKey()

于 2014-05-06T00:56:40.807 回答
0

您可以使用NSEvent来监控全局按键。

您还可以创建一个全局事件监视器,允许您监视其他应用程序中的事件,尽管您无法更改这些事件。

具体来说,看看addGlobalMonitorForEventsMatchingMask:handler:,它安装了一个事件监视器,它接收发布到其他应用程序的事件副本。

+ (id)addGlobalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(void (^)(NSEvent*))block

事件异步传递到您的应用程序,您只能观察事件;您不能修改或以其他方式阻止将事件传递到其原始目标应用程序。

仅当启用了可访问性或您的应用程序受信任以进行可访问性访问时,才可能监视与密钥相关的事件(请参阅 AXIsProcessTrusted)。

如果您确实想阻止或修改事件,则应改为查看CGEvent

于 2014-05-05T22:47:31.673 回答