Cocoa应用程序中的Catch Capslock press



我正在开发一个使用Shpakovski的MASShortcut存储库的应用程序。我引用这个问题是想问,是否有一种方法可以像Shpakovski在他的存储库中那样为Capslock注册快捷方式?

我似乎无法将0xffff(Key Codes显示为Capslock)注册为有效的快捷方式。即使我将其与修改器键组合。我还想在按下系统的Capslock功能之前抓住它。

我知道我可以监听所有的按键,并在发生Capslock时抓住它,但我想避免这种行为,因为我觉得它可能不安全,还会降低整个系统的性能。

编辑:我已经看了一些适用于Windows的C++/C#库,它们实现了这一功能。它们似乎不断地覆盖系统的Capslok标志,我觉得这很奇怪。我基本上有两个问题:

1.如何在没有按键监听器的情况下抓住Capslock按键

2.如何在不触发系统Capslock功能的情况下执行此操作

一种可能是在NSApplicationdelegate中覆盖sendEvent:。来自Apples文档:

您很少直接调用sendEvent:,尽管您可能希望重写此方法以对每个事件执行一些操作。sendEvent:消息是从主事件循环(run方法)发送的。sendEvent:是将事件分派到适当的responsers--NSApp处理应用程序事件,NSWindow对象事件记录中指示的处理与窗口相关的事件,以及鼠标并将关键事件转发到相应的NSWindow对象进一步调度。

您可以评估当前事件是否按下了修饰符键并对此采取行动。

编辑:

对于后台处理,可以使用Quartz事件抽头。如果这会导致拒绝,我不知道。

相关内容

  • 没有找到相关文章

最新更新