最近写代码时老是不小心碰到Insert键,再输入时就覆盖前面内容了,弄的我好郁闷,决定研究一下键盘的工作原理,顺便把这个键给屏蔽掉,在网上学习到了一个键盘映射的机制用来屏蔽,比较好用.
首先了解一下一个叫做键盘映射码--"Scancode Map"
"Scancode Map"是注册表中[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]中的一个二进制键值(默认没有,需新建),并且有固定的格式.Scancode Map 代码的一般格式是:"hex:00,00,00,00,00,00,00,00,|02|,00,00,00,|映射之后的扫描码(XX XX),原扫描码(XX XX)|00,00,00,00".
前8个00是两个DWORD值,表示版本号和头部字节,接下来的02表示需要映射的键位数,如果需要映射一组键位则为02,两组则为03,以此类推,接下来就是需要映射的新扫描码(XX XX),原扫描码(XX XX),{zh1}以四个00结尾.{zh1}的四个零其实是表示{zh1}一组扫描码和结束位,这也是为什么前面映射一组键位需要写入02的原因.
通过这个原理我们再查找到每个键位对应的扫描码的值,就可以对键位进行替换了,比如将A替换成B:
0000000000000000 //头部
02000000BBBBAAAA //BBBB代表B键的扫描码,AAAA代表A键的扫描码
00000000 //结束位,同时代表{zh1}一组扫描码
这样就可以把想屏蔽的码替换成0000,就没有了键盘响应,比如这次我为了屏蔽Insert键,查找到Insert键的扫描码为E052,将这个值设置为
0000000000000000 //头部
02000000000052E0 //将E052替换成0000,注意字节序
00000000 //结束位
同样可以同时屏蔽两个甚至更多个键位,如同时屏蔽Caps Lock和Insert键需设置为
0000000000000000 //头部
03000000000052E0 //屏蔽Insert
00003A0000000000 //屏蔽Caps Lock(00 3A)和结束
修改之后只需要注销当前的登录然后再进入系统就会生效,当然在不需要的时候直接将注册表里的那个键值删去就可以了.
下面是对应的所有键位的扫描码:
Backspace 00 0E
Caps Lock 00 3A
Delete E0 53
End E0 4F
Enter 00 1C
Escape 00 01
HOME E0 47
Insert E0 52
Left Alt 00 38
Left Ctrl 00 1D
Left Shift 00 2A
Left Windows E0 5B
Num Lock 00 45
Page Down E0 51
Page Up E0 49
Power E0 5E
PrtSc E0 37
Right Alt E0 38
Right Ctrl E0 1D
Right Shift 00 36
Right Windows E0 5C
Scroll Lock 00 46
Sleep E0 5F
Space 00 39
Tab 00 0F
Wake E0 63
0 00 52
1 00 4F
2 00 50
3 00 51
4 00 4B
5 00 4C
6 00 4D
7 00 47
8 00 48
9 00 49
- 00 4A
* 00 37
. 00 53
/ 00 35
+ 00 4E
Enter E0 1C
F1 00 3B
F2 00 3C
F3 00 3D
F4 00 3E
F5 00 3F
F6 00 40
F7 00 41
F8 00 42
F9 00 43
F10 00 44
F11 00 57
F12 00 58
F13 00 64
F14 00 65
F15 00 66
Down E0 50
Left E0 4B
Right E0 4D
Up E0 48
Calculator E0 21
E-Mail E0 6C
Media Select E0 6D
Messenger E0 11
My Computer E0 6B
' " 00 28
- _ 00 0C
, < 00 33
. > 00 34
/ ? 00 35
; : 00 27
[ { 00 1A
\ | 00 2B
] } 00 1B
` ~ 00 29
= + 00 0D
0 ) 00 0B
1 ! 00 02
2 @ 00 03
3 # 00 04
4 $ 00 05
5 % 00 06
6 ^ 00 07
7 & 00 08
8 * 00 09
9 ( 00 0A
A 00 1E
B 00 30
C 00 2E
D 00 20
E 00 12
F 00 21
G 00 22
H 00 23
I 00 17
J 00 24
K 00 25
L 00 26
M 00 32
N 00 31
O 00 18
P 00 19
Q 00 10
R 00 13
S 00 1F
T 00 14
U 00 16
V 00 2F
W 00 11
X 00 2D
Y 00 15
Z 00 2C
Close E0 40
Fwd E0 42
Help E0 3B
New E0 3E
Office Home E0 3C
Open E0 3F
Print E0 58
Redo E0 07
Reply E0 41
Save E0 57
Send E0 43
Spell E0 23
Task Pane E0 3D
Undo E0 08
Mute E0 20
Next Track E0 19
Play/Pause E0 22
Prev Track E0 10
Stop E0 24
Volume Down E0 2E
Volume Up E0 30
¥ - 00 7D
E0 45
Next to Enter E0 2B
Next to L-Shift E0 56
Next to R-Shift E0 73
DBE_KATAKANA E0 70
DBE_SBCSCHAR E0 77
CONVERT E0 79
NONCONVERT E0 7B
Internet E0 01
iTouch E0 13
Shopping E0 04
Webcam E0 12
Back E0 6A
Favorites E0 66
Forward E0 69
HOME E0 32
Refresh E0 67
Search E0 65
Stop E0 68
My Pictures E0 64
My Music E0 3C
Mute E0 20
Play/Pause E0 22
Stop E0 24
+ (Volume up) E0 30
- (Volume down) E0 2E
|<< (Previous) E0 10
>>| (Next) E0 19
Media E0 6D
Mail E0 6C
Web/Home E0 32
Messenger E0 05
Calculator E0 21
Log Off E0 16
Sleep E0 5F
Help(on F1 key) E0 3B
Undo(on F2 key) E0 08
Redo(on F3 key) E0 07
Fwd (on F8 key) E0 42
Send(on F9 key) E0 43
习惯了深夜睡不着... ...