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

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

概述OS X检测击键时遇到问题.每当按下键盘键时,我需要检测一个键和一个键释放或键.当使用[NSEvent addLocalMonitorForEventsMatchingMask:handler:]拦截应用程序的事件处理链时,这是相当直接的.这使您可以拦截和修改各种事件类型的NSEvents,包括常规打印键的NSKeyUp和NSKeyDown,以及可用于检测shift,ctrl,alt和cmd键的N 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事件调度机制之外,这意味着即使应用程序失焦也能获得事件.您最终必须自己进行大量的窗口管理和焦点检测.

但它确实有效.

总结

以上是内存溢出为你收集整理的macos – 如何在OS X中检测大写密钥的密钥或密钥释放?全部内容,希望文章能够帮你解决macos – 如何在OS X中检测大写密钥的密钥或密钥释放?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1001050.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存