聆听Swift中所有窗口的按键

68de4m5k  于 2023-02-07  发布在  Swift
关注(0)|答案(2)|浏览(142)

如何在我的应用获得焦点时收听NSEvents,而不受哪个窗口处于活动状态的影响?
我不想监听系统范围内的事件,我只想在我的应用程序获得焦点时监听单个和/或修改后的击键,但我能找到的所有示例都是从NSWindow或NSView监听NSEvents。
我的应用程序有多个窗口,我希望在其中任何一个窗口处于焦点状态时捕获所有击键。

x4shl7ld

x4shl7ld1#

这是可行的,但对这个问题来说有点过头了。正确的方法见 Alexandria 的答案。
覆盖NSApplication.sendEvent。这是应用程序中所有事件的中央调度方法。您可以确定您关心的事件,然后使用super使用它们或发送它们。这是NSApplication中的一个文档覆盖点。这不是一个黑客攻击。
注意,这需要对NSApplication本身进行子类化,而不是由应用程序委托来处理,关于在Swift中对NSApplication进行子类化的说明,请参见Subclass NSApplication in Swift。答案有点乱,关键是设置NSPrincipalClass。)
有关更多技术细节,请参见Cocoa Event Handling Guide,它涵盖了整个架构。

相关问题