键盘的数据主要以扫描码的形式提供,由按键产生或在与计算机的协议中使用。(键盘固件内部使用不同的代码,同时还存在多套扫描代码。在本节中,我们只讨论默认代码--译码集 2 中的代码。不常用的模式将在下文讨论)。每个按键的按下和释放都会产生 0 至 6 个代码。
1.1 按键释放
下面我将只提及按键("make")的扫描码。按键释放("break")的扫描码是通过设置高阶位(加上 0x80 = 128)得到的。因此,按 Esc 键产生的代码为 01,松开 Esc 键产生的代码为 81(十六进制)。序列的情况也类似:按下键盘-/时产生 e0 35,松开时产生 e0 b5。当按键重复时,大多数键盘会重复使码(按键下降码)。有些键盘还会在重复过程中伪造 Shift 下移和 Shift 上移事件。
PrtSc/SysRq 和 Pause/Break 键比较特殊。前者在没有同时按下修改键时产生 e0 2a e0 37,按下 Shift 或 Ctrl 键时产生 e0 37,按下(左或右)Alt 键时产生 54(释放时会产生预期的序列,但请参阅下文)。然而,与(左或右)Ctrl 键一起按下时,会产生 e0 46 e0 c6,释放时同样没有任何结果。不会重复。
请参阅下面关于具有不同行为的按键的报告。
有许多笔记本电脑的按键上弹事件都被严重忽略的报告。因此,意外的按键抬起事件应被视为非同寻常,不予理睬。
---