Ted*_*ton 5 keyboard macos cocoa nsevent appkit
我在OS X检测按键时遇到问题。每当按下键盘键时,我都需要检测按键按下,释放或按键释放。当使用拦截应用程序的事件处理链时,这非常简单[ NSEvent addLocalMonitorForEventsMatchingMask: handler: ]
。这样,您可以截取和修改NSEvent
s的各种事件类型,包括NSKeyUp
和NSKeyDown
常规打印键,以及NSFlagsChanged
可用于检测shift,ctrl,alt和cmd键的s 。事实上,由于修正标志更改两个关键起来为Shift,Ctrl,Alt和CMD键按下按键,NSFlagsChanged
可以用来作为检查的重要上升,键按下事件对于那些键[NSEvent modifierFlags]
与一起[NSEvent keyCode]
。
但Capslock是不同的。因为capslock修饰符实际上仅作用于向下按下键,所以当您按下capslock时,只会获得NSFlagsChanged
带有capslock的按下,而不是在释放时按下。并且NSKeyUp
和NSKeyDown
不会与Capslock和shift和ctrl等修饰键一起发出。
任何人都可以建议一种方法,甚至可以使用较低级别的界面来获取capslock键启动事件吗?我是否将不得不使用kqueues或其他东西?
IOHIDLib 似乎是执行此操作的唯一方法。我(或者实际上的队友)使用 IOHIDManager 设置了一个事件回调,成功拦截了大写锁定按键向上和向下按键事件。
可怕的是,这完全超出了 Cocoa/CoreFoundation 事件调度机制,这意味着即使您的应用程序失去焦点,您也会收到事件。您最终必须自己进行大量窗口管理和焦点检测。
但它确实有效。
归档时间: |
|
查看次数: |
1414 次 |
最近记录: |