如何检测OS X中capslock密钥的密钥打开或密钥释放



我在OS X检测击键时遇到问题。每当按下键盘键时,我需要检测一个按键按下和一个按键释放或按键向上。当使用[ NSEvent addLocalMonitorForEventsMatchingMask: handler: ]截取应用程序的事件处理链时,这是相当直接的。这使您可以截取和修改各种事件类型的NSEvent,包括常规打印键的NSKeyUpNSKeyDown,以及可用于检测shift、ctrl、alt和cmd键的NSFlagsChanged。事实上,因为shift、ctrl、alt和cmd键的键向上和键向下的修饰符标志都会发生变化,所以通过检查[NSEvent modifierFlags][NSEvent keyCode]NSFlagsChanged可以用作这些键的键上和键下事件。

不过,头带锁不同。因为capslock修饰符实际上只作用于按下键,所以当你按下capslock时,你只会得到一个按下capslok的NSFlagsChanged,而不是当它被释放时。NSKeyUpNSKeyDown不使用capslock、shift和ctrl等修改键发射。

有人能提出一种方法,甚至可能是一个较低级别的界面,来获取capslock密钥打开事件吗?我会不得不使用kqueues或其他什么吗?

IOHIDLib似乎是实现这一点的唯一方法。我(或者实际上是一个队友)使用IOHIDManager设置了一个事件回调,成功地截获了capslock key up和key down事件。

可怕的是,这完全超出了Cocoa/CoreFoundation事件调度机制,这意味着即使应用程序不在焦点上,也会得到事件。你最终不得不自己做大量的窗口管理和焦点检测。

但它确实有效。

相关内容

  • 没有找到相关文章

最新更新