如何将 NSEvent 标记为已处理?

Ser*_*vin 2 macos xcode cocoa swift

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

NSEvent.addGlobalMonitorForEvents(matching: NSEvent.EventTypeMask.keyDown) { event in
    // code
}
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*ier 5

你不能用NSEvent. 正如文档所述:

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

你不是事件生成系统的一部分;您只是在 runloop 中收到通知。

如果你想成为事件系统的一部分,在应用层下面,你需要使用CGEvent. 见tapCreate(tap:place:options:eventsOfInterest:callback:userInfo:)。回调可以返回NULL以指示它已使用该事件。