作为一项实验,我试图实现以下目标:
- 让空格键用作修饰键 - 就像 Shift 键一样 - 按住空格键并键入键会打印不同的字母。释放空格键会将状态恢复为正常状态,只需按下它就像正常的空格键一样。
我正在考虑处理 keydown 和 keyup 事件,但显然handleEvent:client:
在IMKServerInput 协议中似乎只捕获 key down 和 mouse 事件。
没有太多可可经验,我尝试了一些方法但没有成功:
- 通过互联网档案浏览了技术说明 2128 ,它给了我对 plist 项目的适当解释。仍然,没有关于keyup。
- 尝试将 NSKeyUpMask 添加到
recognizedEvents:
IMKStateSetting Protocol,但这似乎也没有捕捉到事件。 - 使用addLocalMonitorForEventsMatchingMask:handler:进行了一些测试, 但没有任何反应。
- 未能找到
NSFlagsChanged
使用空格键触发事件的方法。 - 阅读有关Quartz Event Service的信息,
CGEventTap
它似乎处理较低级别的用户输入。还没有走这条路。 - IOHID 管理器?
我得出一个结论,IMKit 只能被动接收事件。由于它不是应用程序,因此没有keyUp:
方法可以覆盖-AFAIK,IMKit 不继承NSResponder
类。
不幸的是,cocoa 太宽泛了,对于像我这样的新手来说,它的文档要少得多(或充满了无用的文档)。
任何人都可以帮助我走向正确的方向吗?