【问题标题】:How to mark the NSEvent as handled?如何将 NSEvent 标记为已处理?
【发布时间】:2018-01-07 08:22:57
【问题描述】:

我使用以下代码处理键盘上字母键的按下。

NSEvent.addGlobalMonitorForEvents(matching: NSEvent.EventTypeMask.keyDown) { event in
    // code
}

然后如何将 NSEvent 标记为已处理,不允许系统和其他应用再次处理它?例如不允许在打开的文本编辑器中输入按下的字母?

【问题讨论】:

标签: swift xcode macos cocoa


【解决方案1】:

NSEvent 无法做到这一点。正如文档所述:

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

您不是事件生成系统的一部分;您只是在运行循环中收到通知。

如果你想成为事件系统的一部分,在app层下,你需要使用CGEvent。见tapCreate(tap:place:options:eventsOfInterest:callback:userInfo:)。回调可以返回NULL 以表明它已经消费了该事件。

【讨论】:

    猜你喜欢
    • 2015-01-26
    • 2023-03-25
    • 2015-12-25
    • 2012-05-16
    • 2015-11-03
    • 2015-07-15
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    相关资源
    最近更新 更多