键盘扫描码

1.键盘扫描码

键盘上的数据主要以扫描代码的形式出现,这些扫描代码由按键产生或在计算机协议中使用。( 键盘固件在内部使用了不同的代码,并且还存在几 组扫描代码。在本节中,我们仅讨论默认代码-来自转换后的扫描代码集2的默认代码。下面讨论一些不太常见的模式 。)每次按键和释放键会产生0到6个扫描码。

1.1密钥发布

下面我仅提及按键的扫描代码(“ make”)。通过设置高位(加0x80 = 128)可以从中获得密钥释放(“ break”)的扫描代码。因此,Esc印刷机产生扫描码01,Esc释放扫描码81(十六进制)。对于序列,情况相似:键盘-/ 按下时给出e0 35,释放时给出e0 b5。重复按键时,大多数键盘会重复输入代码(按键代码)。有些人还会在重复过程中伪造Shift down和Shift up事件。

PrtSc / SysRq和Pause / Break键是特殊的。 当没有同时按下修饰键时,前者生成扫描代码e0 2a e0 37e0 37 与Shift或Ctrl 一起按下,但54与(左或右)Alt一起出现。(并且在释放时获得了预期的序列。但是请参见 下文。)后者 在按下时(不带修饰符)会产生扫描码序列 e1 1d 45 e1 9d c5,而在释放时则什么也没有。但是,连同(左或右)Ctrl一起,将得到 e0 46 e0 c6,在释放时也没有任何结果。它不会重复。

有关具有不同行为的键的报告,请参见 下文

有许多关于笔记本电脑键击事件严重反弹的报告。因此,意外的按键事件可能应该被认为是不寻常的,并且可以忽略。没有提前按下键盘按键事件的另一个来源可能是 假班次

1.2协议扫描码

大多数扫描代码表示按键或释放。一些在通讯协议中使用。

00键盘错误-见ff
aBAT(基本保证测试)确定
eeecho命令的结果
f1一些键盘,作为对命令a4的答复:未安装密码
F A来自kbd的确认
fcBAT错误或鼠标传输错误
fd内部故障
FE键盘无法确认,请重新发送
ff键盘错误

键盘错误的三个常见原因是:(i)同时按下多个键;(ii)键盘缓冲区溢出;(iii)键盘和键盘控制器用于通讯的串行线上的奇偶校验错误。报告的错误是FF在 扫描码模式 1,和00在扫描码模式2和3。如果翻译是,既00FF 被翻译为FF

通常,这些代码具有协议含义。但是,它们也以实际的扫描代码出现,尤其是在以e0为前缀的情况下。

1.3转义扫描码

代码e0e1引入了扫描代码序列,通常不单独用作隔离的扫描代码(但请参见 下文)。

(前缀e0最初用于原始PC / XT键盘上的键的灰色重复。如今,e0仅用于扩展代码空间。用于暂停/中断的前缀e1表示此键发送通/断序列在发布时,并且在发布时不执行任何操作。)

此,与上述情况,意味着该值 006061图6e71, 图7a图7c图7E图7F 是不可用的,以表示按键(默认键盘上)。尽管如此,它们也以扫描代码的形式出现,例如,参见下面的 Telerate和 Safeway SW23键盘。

其他前缀也会出现,请参见 下文

Logiteche2前缀用于键盘上集成的定点设备发送的代码。

1.4普通扫描码

转换后的扫描码集2中的扫描码以十六进制表示。括号之间是美式键盘上的键帽。扫描代码是按顺序给出的,并根据通常彼此相邻的一组密钥进行分组。

00通常是错误代码

01(Esc)

02(1!),03(2 @),04(3#),05(4 $), 06(5%E),07(6 ^),08(7&), 09(8 *),0a( 9(),0b(0)),0c(-_), 0d(= +),0e(退格键)

0f(Tab),10(Q),11(W),12(E), 13(R),14(T),15(Y), 16(U),17(I),18(O), 19(P),1a([{),1b(]})

1c(输入)

1d(LCtrl)

1e(A),1f(S),20(D),21(F), 22(G),23(H),24(J),25(K), 26(L),27(; 🙂 ,28(’“)

29(`〜)

2a(左移)

2b(\ |),在102键键盘上

2c(Z),2d(X),2e(C),2f(V), 30(B),31(N),32(M),33(,<), 34(。>),35(/ ?),36(RShift)

83/84键键盘上的37(键盘-*)或(* / PrtScn)

38(LAlt),39(空格键),

3a(大写锁定)

3b(F1),3c(F2),3d(F3),3e(F4), 3f(F5),40(F6),41(F7), 42(F8),43(F9),44(F10)

45(NumLock)

46(滚动锁定)

47(键盘7 / Home),48(键盘8 / Up), 49(键盘9 / PgUp)

4a(键盘-)

4b(小键盘4 /左),4c(小键盘5), 4d(小键盘6 /右),4e(小键盘- +)

4f(键盘-1 /结束),50(键盘-2 /下), 51(键盘-3 / PgDn)

52(键盘-0 / 插入),53(键盘-./Del)

84 +键盘上的54(Alt-SysRq)

55不太常见;例如,在Cherry G80-0777键盘上为F11,在Telerate键盘上为F12,在Focus 9000键盘上为PF1,在IBM ThinkPad上为FN。

56个主要在非美国键盘上使用。它通常是 左Alt键左侧 或 右侧的未标记 键。

101+键键盘上的57(F11),58(F12)

59 – 5A -…- 1408米是不太常见的。分配基本上是随机的。扫描码55 – 59发生的对F11-F15 樱桃G80-0777键盘。扫描码59 – 5C上出现 RC930键盘。X呼叫5d的 `KEY_Begin’。扫描码61 – 64出现上 德励键盘。扫描码556D6F7374, 777879图7aFocus 9000键盘上出现 ,7b, 7c7e。扫描码656769图6b 一个上发生 康柏阿马达键盘。扫描码66 – 6873发生上 樱桃G81-3000键盘。扫描码707379图7b图7d 一个上发生 日本一百零六分之八十六键盘

扫描代码f1f2出现在 韩文键盘上

1.5转义的扫描码

除了具有以e1开头的转义序列的Pause / Break键之外,使用的转义键是e0。通常,以这样一种方式选择代码:当接收方只是丢弃e0时,会发生一些有意义的事情。

e0 1c(键盘输入)1c(输入)
e0 1d(RCtrl)1d(LCtrl)
e0 2a(假LShift)2a(左移)
e0 35(键盘-/)35(/?)
e0 36(假RShift)36(右移)
e0 37(Ctrl-PrtScn)37(* / PrtScn)
e0 38(倾斜)38(升)
e0 46(Ctrl-Break)46(滚动锁定)
e0 47(灰色之家)47(键盘7 / Home)
e0 48(灰色)48(小键盘8 /向上箭头)
e0 49(灰色PgUp)49(小键盘9 / PgUp)
e0 4b(左灰色)4b(小键盘4 /左)
e0 4d(灰色右)4d(键盘6 /右)
e0 4f灰底4f(小键盘-1 /结束)
e0 50(灰暗)50(键盘2 /向下箭头)
e0 51(灰色PgDn)51(键盘3 / PgDn)
e0 52(灰色插入)52(键盘-0 /插入)
e0 53(灰色删除)53(键盘-./Del)

这些转义的扫描代码仅在101+键键盘上发生。在 微软键盘增加

e0 5b(左窗)
e0 5c(RightWindow)
e0 5d(菜单)

还会发生其他转义的扫描代码-请参见下面各个键盘下的内容。

1.6假班次

十个灰色键Insert,Home,PgUp,Delete,End,PgDn,Up,Left,Down,Right均应起作用,而与Shift和NumLock键的状态无关。但是对于旧的AT键盘,当Numlock打开或Shift按下时,键盘键会产生数字。因此,为了欺骗旧程序,将发送伪造的扫描代码:当LShift按下并按下Insert键时,发送e0 aa e0 52;释放插入e0 d2后, 将发送e0 2a。换句话说,将插入伪造的LShift-up和伪造的LShift-down。

如果Shift键早于重复键被释放,则会出现一个真正的Shift-up代码(之前没有伪造的Shift-down),因此忽略e0的程序将比Shift-down看到更多的Shift-up。

启用NumLock时,在Shift按下时不会发送任何虚假的Shift,但是在Shift没按下时不会发送假的Shift。因此,使用Numlock时,如果按下Insert键, 则发送e0 2a e0 52,并在释放e0 d2后 发送e0 aa。键盘保持专用的NumLock模式,在按下NumLock时切换,并在设置NumLock LED时设置。

以相同的方式,当Shift向下时,Grey- /键会产生伪Shift-up和伪Shift-down序列。但是,它不会对NumLock的状态作出反应。当然,这样做的目的是使将Grey- /标识为普通/的程序变得愚蠢,这样它们就不会像Shift- /一样将Shift-Grey- /当作对待。

在Toshiba笔记本电脑上,三个Windows按键的处理方式与前面提到的十个按键的处理方式相同,当Shift(向下或向右)移动时,会得到假的转换。他们不会对NumLock做出反应。

1.7添加了非假班次

在我的121键 诺基亚数据键盘上,有功能键F1,…,F24,其中F1,…,F12发送期望的代码3b,…,58和F13,…,F24发送期望的代码 。相同的代码以及LShift代码2a。因此,F13 在按下时给出2a 3b,在释放时给出bb aa。同样,有些键具有添加的LCtrl代码1d。但是也有一些密钥带有伪造的班次e0 2a

Delorie 报告说,带有其他F11-F22键的“ P​​reh Commander AT”键盘将F11-F20视为Shift-F1..Shift-F10和F21 / F22视为Ctrl-F1 / Ctrl-F2;具有F11-F24键的Eagle PC-2键盘以相同的方式处理这些其他键

1.8 Turbo模式

在某些主板上,LCtrl-LAlt-GreyPlus和LCtrl-LAlt-GreyMinus分别打开/关闭Turbo模式。对于这些,按下Turbo按钮时母板可能会生成相同的扫描码序列:Turbo开关(高→低): 1d 38 4a ce b8 9d 和Turbo开关(低→高): 1d 38 4e ce b8 9d

这种样式的其他特殊组合包括LCtrl-LAlt-LShift-GreyMinus和LCtrl-LAlt-LShift-GreyPlus,以关闭/打开系统缓存。

如果在AMIBIOS Setup中启用了Green PC系统节能模式,则AMI MegaKey键盘控制器会识别以下组合:Ctrl-Alt-\(将系统置于立即掉电模式),Ctrl-Alt-[(禁用Green PC节能模式)临时),Ctrl-Alt-](启用绿色PC关机模式)。

Thio Yu Jin < jin@singmail.com>抱怨说,在他的Toshiba 4010CDS上,Ctrl-Alt-Shift-T组合键弹出了Toshiba用户手册。(1999年3月4日-不是4月1日。)

1.9省电

Microsoft建议:“基于i8042的键盘应为电源管理按钮(即POWER和SLEEP按钮)部署以下扫描代码:

第1组通/断第2组通/断
功率e0 5e / e0 dee0 37 / e0 f0 37
睡觉e0 5f / e0 dfe0 3f / e0 f0 3f
唤醒e0 63 / e0 e3e0 5e / e0 f0 5e

“电源”,“睡眠”和“唤醒”事件扫描代码与i8042等效,相当于“系统关机,系统睡眠和系统唤醒HID的用法”。

许多键盘具有电源/睡眠/唤醒键,这些键必须由第四个键(未标记或标记为FN)激活:按下这四个键之一不会产生任何扫描代码,但是同时按下FN键时,电源/睡眠/唤醒键提供上面列出的代码。

1.10初始化特殊键盘

许多键盘具有比标准键盘更多的键和按钮。有时,这些附加键会产生以前未使用过的扫描码组合。但是,在其他键盘上,此类附加键根本不会产生任何代码,直到采取一些初始化措施为止。

有时,该操作包括将一些字节写入键盘寄存器。例如,请参阅 IBM Rapid Access键盘和 Omnibook键盘

1.11操纵额外的LED

一些键盘具有附加的LED,在某些情况下,我们知道如何操作这些LED。

的 群光键盘需要的命令序列 EB 00 的xy,与 XY = 01为月球LED和 XY = 02为ZZZ LED。

在 IBM EZ按钮键盘需要的命令序列EB 00 的xy,与 XY = 01为Msg灯, XY = 02为CD LED, XY = 04的电源LED, XY = 10用于通话LED,和 XY = 20为消息等待指示灯。

的 IBM快速访问键盘需要的命令序列EB 00 的xy,与 XY = 04的挂起LED和 XY = 20为静音LED。

的 IBM快速访问键盘II所需要的命令序列EB 71EB 70 切换待机LED打开和关闭。

在 罗技Internet键盘 有一个额外的琥珀色LED。通过发送eb将其打开,然后大约每秒闪烁一次。ec再次将其关闭。

1.12笔记本电脑FN键

笔记本电脑无法容纳通常在普通键盘上找不到的所有无意义的键。因此,数字键盘和其他键被折叠到键盘的主要部分中。没有标签或带标签的FN的密钥通常用于修改其他密钥的含义。该FN本身不会产生扫描代码,它只会修改其他键产生的扫描代码。

尼尔·布朗(Neil Brown)报告了有关他的戴尔Latitude D800笔记本电脑的信息,该笔记本电脑有五个按键组合,无法产生正确的中断代码。FN + F2,FN + F3,FN + F10,FN + Down,FN + Up(标记为Wireless,Brighter,Darker,Battery,CDEject)的五个组合产生了制造代码e0 08e0 07, e0 09e0 05e0 分别为06。前三个不会产生任何中断代码。最后两个具有与make代码相同的中断代码。

Leave a Reply