Ibo*_*lit 2 macos cocoa nsevent
在 Cocoa 中,您可以重写keyDown(event:NSEvent)
某些类中的方法,以便在用户按下某个键时收到通知。在大多数情况下,事件将包含按键代码和按下的字符等。但是,如果您按美式扩展键盘上的\'
或"
,您将得到键控代码,但不会得到符号。当您键入时,例如在文本编辑器中,您将在橙色背景上获得相应的符号,然后,如果您键入一个字母,如果该字母可以用该符号重音,您将获得重音字母,例如\xc3\xb2
or\xc3\xb6
或\xc3\xb3
。
我能以某种方式从活动中获得口音,或者在活动结束后立即在某个地方查找它吗?
\n首先,这样的键被称为“死键”。它们本身不产生字符,而是修改后续击键产生的字符。
\n\n至于你的问题,死键事件没有单一的口音。死键只会改变内部状态机的状态。在某些键盘布局中,单个死键可以具有多种效果,具体取决于后续键。例如,在爱沙尼亚语键盘布局中,Option-(退格键左侧的键)设置死键状态,将“a”更改为“\xc3\xa4”,“i”更改为“\xc5\xaf” ,“z”到“\xc5\xbc”,“\xc3\xb6”到“\xc5\x91”。
\n\n无论如何,如果您想手动处理关键事件,您可以使用UCKeyTranslate()
. 您需要键盘布局\'uchr\'
数据,您可以使用该数据并通过 keyTISCopyCurrentKeyboardLayoutInputSource()
调用该数据。TISGetInputSourceProperty()
kTISPropertyUnicodeKeyLayoutData
您还需要键盘类型,您可以从CGEvent
该键盘的NSEvent
基础上获取该类型。呼叫CGEvent()
,NSEvent
然后CGEventGetIntegerValueField()
用钥匙呼叫该kCGKeyboardEventKeyboardType
。
您还必须将事件中修饰键的 Cocoa 值转换为右移 8 位的 Carbon 值(shiftKey
、cmdKey
等的组合)。
您需要跟踪正在运行的死键状态。最初,您将其设置为 0,然后对于每个关键事件您都可以UCKeyTranslate()
更新它。当焦点转移到另一个控件或窗口时,您可以将其重置为 0。
如果从返回时死键状态非零,UCKeyTranslate()
则存在死键。UCKeyTranslate()
也可能产生了人物。也就是说,击键既可以产生真实字符,又可以设置死键状态,该状态将修改后续的击键。
如果您想呈现一个字符来表示死键状态,则可以UCKeyTranslate()
在死键状态和kUCKeyTranslateNoDeadKeysMask
选项中再次处理击键。我相信这就是确定“标记”字符(以橙色显示)的方式,尽管正如我上面所说,该字符不一定与死键状态实际上如何影响后续击键有任何特定关系。您还可以处理假按空格键来确定该字符。