我正在考虑创建自定义键盘布局。密钥映射到 unicode。我经常使用的一种快捷方式是alt + <arrow>
或alt + <backspace>
.如何使用 unicode 获得相同的效果?
你不能。Unicode 是描述字符而不是键的标准。F1键甚至没有Unicode代码点,更不用说组合了。
键映射到 unicode。
这种说法是不真实的。 密钥映射到扫描码。 到字符集的任何映射都由操作系统执行,并非所有键或组合键都必须映射到字符。 操作系统可以进一步将键代码抽象为虚拟键代码,以便处理各种键盘布局和特殊键。
扫描码是 8 位值,扩展键产生代码对 - 第一个为零 (NUL),表示第二个代码紧随其后,因此允许 510 个不同的代码。
请注意,扫描码通常适用于特定密钥,而不是生成的字符。 对于"字符"键,shift、alt、ctrl 等(它们有自己独特的扫描码)不会修改扫描码,因此"扩展"键(如功能键)可以充当修饰符。
通常,您不会在扫描码级别访问键盘,而是使用操作系统的键盘服务来确定键状态或字符映射。 例如,仅通过扫描码无法区分N
和n
- 必须考虑左移、右移、alt-gr 和当前大写锁定切换状态的关键状态。 扫描码访问主要供键盘驱动程序处理。
更高级别的键盘访问特定于操作系统。 例如,在Windows中,有一个广泛的API和键盘访问框架。 在这种情况下,感兴趣的可能是将虚拟键代码映射到 Unicode(存在此类转换)的toUnicode()
和toUnicodeEx()
函数。 但是,Alt+ AFAIK没有翻译,在GUI消息循环中,您将获得带有VK_UP
,VK_DOWN
,VK_LEFT
或VK_RIGHT
参数的WM_SYSKEYDOWN
消息。 实际上,您将收到其他消息,但WM_SYSKEYDOWN
是专门为Alt+序列发出的,因此您无需单独处理和维护Alt键WM_KEYDOWN
/WM_KEYUP
的状态。