http://blog.chinaunix.net/uid-174325-id-3912617.html
NINFO 这里把左win替换成小键盘5键,注意004C是左Win,E05B是Num5,注意在reg中的顺序
被替换的键写到后面,高低字节也要反向
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard Layout] "Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,5B,E0,4C,00,00,00,00,00
今天终于对thinkpad x201等笔记本键盘上的back(后退)和forward(前进)键忍无可忍,这两个键在“上”键的两边,在网上编辑文本的时候非常容易碰到,然后就杯具了,所有输入的文字全部丢失。
原来的解决办法比较暴力,把这两个键扣掉,但最近刚换了键盘,再扣掉也有点有碍观瞻,打“懒牛卧” 客服电话被告知:知道这个问题,但没有官方解决方案,好吧(我能说脏话吗~~~~~)
没办法,日子还得过,上网自立更生,相信网友的力量是无穷的,在经历了2个小时奋斗后,终于发现了这个:
http://51nb.chinaidns.com/forum/viewthread.php?tid=1100072&page=1
通过这个地址,又发现了这个:
http://hi.baidu.com/zodondon/item/c577fd928a45a4dd1e42714c
原来,so easy,哈哈哈,大笑三声用来鄙视“懒牛卧”
从上面文章中摘录编辑了一下:
Scancode Map的妙用,按键随意变换!
在Windows XP/Windows 2000 系统中,提供了一种新的键盘扫描码映射方法,使你能随意地设置键盘键位的布局,这就是注册表中的 “Scancode Map”我们巧妙利用“Scancode Map”就可将普通键盘改造成随心随意的个性化键盘。
为了正确设置,我们有必要先了解一下“Scancode Map”(扫描码映射)。
“Scancode Map”是注册表中[HKEY_LOCAL_MacHINESYSTEMCurrentControlSetControlKeyboard 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两个0)是版本号和头部字节,接下来的“02”表示映射数,其最小为值为“02”,表示只映射一组(这里的数值是映射数目加上末尾用作结尾的“00,00,00,00”,因此总是比实际的映射数目大一),若要映射多组,只需增加相应的值即可,如映射2组其值应为“03”,3组为“04”。
后边代码每4个是一组:前两个是映射后键位的扫描码,后两个是键位原扫描码。如果要交换两个键,则一个有两组映射,四个值的排列形式是:键A,键B,键B,键A——它表示:键A成为键B,键B成为键A。
最后以“00,00,00,00” 结尾。注意:在注册表中输入时,需要将扫描码的高低字节交换一下。
另外,如果想要某个键失效,将它的扫描码映射为“00 00”即可。
若要恢复键盘键位原来的布局,只需定位于注册表[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard Layout],删除"Scancode Map"键值
特别说明:
1. 在目前的Windows版本下面,对键盘映射是全局的,而不是针对某个用户的,如果您修改添加或者删除了某个映射,那么不管哪个用户使用,键盘都发生了变化;
另外,如果一台电脑有多个键盘,那这些键盘都会产生同样的变化。
2. 在XP上不能屏闭POWER SLEEP WAKE UP 这三个键。(没有亲自测试,笔记本上没有这三个键,如果真不行就扣掉吧 ------ 开玩笑,在台式机上这三个键通过bios设置应该可以把相应功能禁用掉)
3. thinkpad 上的“Fn”键是不能被映射的,因为它不能被OS识别,所以不能使用上面的方式进行设置。thinkpad新版的bios里面提供了一个功能,让左侧的“Fn”键和相邻的“Ctrl”键进行功能互换,感觉用处不是很大,有需要的朋友可以去试试看。(如果在笔记本的 bios上找不到这个功能的话,需要刷新版bios,操作很简单,不要恐惧)
导入或设置或修改或删除注册表键值后,重启你的电脑,改变就生效了。
也可以用将下面的文本存成“scancode.reg”,双击导入注册表。键值可通过查上面提到的键位表查询,找到你要替换的 Scan Code码,把##,##替换掉就可以了。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,##,##,##,##,00,00,00,00
了解了“Scancode Map”之后,我们就可以来利用添加功能键了。比如WIN键扫描码为:“E0 5B”,Esc为“00 01”,左边的Ctrl为“00 1D”,更详细的扫描码请见键盘扫描码。
举例:
比如:前面提到的IBM ThinkPad键盘,为了把那个浏览器网页前后浏览的键禁止,可以设置为:
"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,00,00,6A,E0,00,00,69,E0,00,00,00,00
比如:说我们想把F9,F10键修改成为音量调整键,通过查表,可以得知:
F9、F10扫描码分别为(00,43)、(00,44),
Volume Up、Volume Down的扫描码分别为(E0,30)、(E0,2E),
这样只要将Scancode设置为如下就可以了: "Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,30,E0,43,00,2E,E0,44,00,00,00,00,00
( 含义为: | 版本号和头部字节 | 两组映射 | 第一组 | 第二组 | 结尾终止 | )
我是把“后退”和“前进”两个按键映射为“上翻页”和“下翻页”,注册表文件如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,49,e0,6a,e0,51,e0,69,e0,00,00,00,00
再次说明:所有对注册表的修改,必须在重新启动电脑后,才能生效。
Linux系统中可以用下面命令:
[root@localhost ~]# setkeycodes e06a 104
[root@localhost ~]# setkeycodes e069 109
在linux环境下可以用showkey命令测试按键的键盘码或者扫描码(加-s选项),注意按键“按下”和“松开”的扫描码可能不一样,例如大小写切换键,按下是3A,松开是BA
键盘扫描码对应表
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
现在使用的是fedora 20,将这两句写在了/etc/rc.d/rc.local中,保证能够在启动后被加载