macos – 如何在OS X中检测大写密钥的密钥或密钥释放?

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

然而,Capslock是不同的.因为大写锁定修饰符实际上只对按键有效,所以当你按下大写时,你只会按下大写的NSFlagsChanged,而不是当它被释放时.并且NSKeyUp和NSKeyDown不会发送修饰键,如capslock和shift和ctrl等.

任何人都可以建议一种方式,甚至可能是一个较低级别的界面,以获得大写锁定密钥事件?我不得不求助于使用kqueues或其他东西吗?

解决方法

IOHIDLib似乎是这样做的唯一方法.我(或实际的队友)使用IOHIDManager来设置成功拦截大写字母加密和按键事件的事件回调.

可怕的是,这完全在Cocoa / CoreFoundation事件调度机制之外,这意味着即使应用程序失焦也能获得事件.您最终必须自己进行大量的窗口管理和焦点检测.

但它确实有效.

相关文章

我正在用TitaniumDeveloper编写一个应用程序,它允许我使用Ja...
我的问题是当我尝试从UIWebView中调用我的AngularJS应用程序...
我想获取在我的Mac上运行的所有前台应用程序的应用程序图标....
我是一名PHP开发人员,我使用MVC模式和面向对象的代码.我真的...
OSX中的SetTimer在Windows中是否有任何等效功能?我正在使用...
我不确定引擎盖下到底发生了什么,但这是我的设置,示例代码和...