虚拟、JavaScript 或 ASCII 代码与键盘扫描码之间有什么区别?

虚拟、JavaScript 或 ASCII 代码与键盘扫描码之间有什么区别?

有人能解释一下为什么键盘上的每个键似乎都分配有两个相互矛盾的数字吗?我正在使用 KeyTweak。我很困惑,因为当我重新映射一个键时,KeyTweak 的“当前有效的重新映射键”中的键号与 Raw Mapping 或 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout 中的键号不匹配。

例如,因为我经常在 MacBook Pro 上运行 Windows 并希望能够向前删除,而 Mac 没有(向前)Del 键,所以我将很少使用的 F12 键重新映射到 Del。当我进行此重新映射时,KeyTweak 在“当前有效的重新映射键”中告诉我 F12 是键 # 123。然而,在 Raw Mapping 中,它说 F12 是十六进制的 0058,即十进制的 88(不是十进制的 123,因为那是十六进制的 007B)。检查注册表中的 Scancode Map 确认键 0058(F12)已重新映射到键 E053(Del)。

我搜索了许多网站,发现 123 被描述为“虚拟键代码”或“JavaScript 字符代码”或“ASCII 代码”或“键盘事件值”,而十六进制 58(十进制 88)被描述为键盘扫描代码,或简称为键代码。(我知道 macOS 中的 AppleScript 将 F12 键分配为键 # 111,但那是另一回事。)如果可能的话,有人可以解释一下为什么每个键在 Windows 中都有两个不同的值 - 例如,F12 键表示为 123(十六进制 007B)或 88(十六进制 0058)?从历史上看,每个不同的值来自哪里?一个是特定于 Windows 操作系统或 Wintel 架构的,另一个是多平台的?或者一个更面向硬件,另一个更面向软件?

谢谢。

相关内容