我遇到OS X检测击键的问题。每当按下键盘键时,我需要检测一个键和一个键释放或键。当使用[ NSEvent addLocalMonitorForEventsMatchingMask: handler: ]
拦截应用程序的事件处理链时,这是相当直接的。这样,您就可以拦截和修改各种事件类型NSEvent
,包括常规打印键的NSKeyUp
和NSKeyDown
,以及可用于NSFlagsChanged
的{{1}}检测shift,ctrl,alt和cmd键。实际上,因为shift键,ctrl键,alt键和cmd键的键向上键和键键都有变化,NSFlagsChanged
可以通过检查{[NSEvent modifierFlags]
作为这些键的键向上键和键击事件。 {1}}以及[NSEvent keyCode]
。
NSFlagsChanged
并按下大写锁定,而不是在它被释放时。并且NSKeyUp
和NSKeyDown
不会使用修饰键(如capslock,shift和ctrl等)发出。
任何人都可以建议一种方法,甚至可能是更低级别的界面,以获取大写锁定密钥事件?我不得不求助于使用kqueues或其他东西吗?
答案 0 :(得分:3)
IOHIDLib似乎是这样做的唯一方法。我(或实际上是一个队友)使用IOHIDManager来设置一个事件回调,成功截获了大写字母加密和按键事件。
可怕的是,这完全在Cocoa / CoreFoundation事件调度机制之外,这意味着即使应用程序失焦也能获得事件。您最终必须自己进行大量的窗口管理和焦点检测。
但确实有效。