我使用ToUnicodeEx函数将扫描码和虚拟键码转换为Unicode字符。在大多数情况下,它的工作原理如文档中所述。但在某些键盘布局中的某些键上,ToUnicodeEx 用零填充缓冲区但返回 1。根据 MSDN,这意味着将一个字符写入缓冲区。但缓冲区中的第一个值包含 0。我应该如何解释这些值组合?
我在以下情况下发现了这种行为:
Microsoft Keyboard Layout Creator 加载这些布局时不会出现错误。在阿拉伯语 (102) 上,有问题的键为空。在因纽特语上 - 有问题的拉丁布局键包含大括号字符“}”。
我不明白,键盘布局创建器如何读取这个字符。
看起来合法。 Key 在此布局/状态下为键生成
U+0000 Null
字符。你可以跳过它。
我认为如果这些键定义为
WCH_NONE
那么 ToUnicode
将返回 0。
https://learn.microsoft.com/globalization/keyboards/kbda2
https://learn.microsoft.com/globalization/keyboards/kbdiulat
http://kbdlayout.info/kbdiulat
“因纽特语 - 拉丁语”的特殊之处在于它使用
SGCAPS
功能:
某些键盘不会将所有击键的 CapsLock 和 Shift 键关联在一起;相反,按 CapsLock 键可为特定键定义额外的两个转换状态。因此,某些语言如果没有 CapsLock 键就无法键入。名称中的“SG”源自使用该功能的第一个键盘布局,即瑞士德语键盘布局。
请参阅 http://kbdlayout.info/features/SGCAPS 了解更多信息。