【问题标题】:Mac OSX capture all keypresses from MenuBar applicationMacos 从菜单栏应用程序中捕获所有按键
【发布时间】:2014-05-06 08:56:40
【问题描述】:

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

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

【问题讨论】:

    标签: macos keydown


    【解决方案1】:

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

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

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

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

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

    只有在启用了可访问性或您的应用程序在可访问性访问方面受信任(请参阅 AXIsProcessTrusted)时,才能监控与密钥相关的事件。

    如果您确实想阻止或修改这些事件,您应该转而查看CGEvent

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-15
        • 1970-01-01
        • 2012-12-07
        • 1970-01-01
        相关资源
        最近更新 更多