Scancode Map的妙用,按鍵隨意變換!
在Windows XP/Windows 2000 系統中,提供了一種新的鍵盤掃描碼映射方法,使你能隨意地設置鍵盤鍵位的布局,這就是注冊表中的 “Scancode Map”我們巧妙利用“Scancode Map”就可將普通鍵盤改造成隨心隨意的個性化鍵盤。
為了正確設置,我們有必要先了解一下“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兩個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_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard 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_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard 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_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard 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
再次說明:所有對注冊表的修改,必須在重新啟動電腦后,才能生效。
http://blog.chinaunix.net/uid-174325-id-3912617.html
--------------------------------------------------------------------------------
Scancode Map 注冊表項來實現鍵盤按鍵映射。
位於注冊表的:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout\ 下新建一個二進制值項: "Scancode Map"
這個項目可實現對鍵盤按鍵的映射。這里映射的意思可理解為“替換”,可將任意一鍵替換成其它鍵。
[項目格式]
以16進制表示,更分為五個部分,每個逗號之間都為一個字節。
"Scancode Map" = 00,00,00,00,00,00,00,00, 02,00,00,00, 01,00, 02,00, 00,00,00,00
- 8個字節。 這是版本信息號。照例寫就好。
- 4個字節。 這是映射鍵的總數。按照二進制的讀寫規則,低位在左,高位在右。02 00 00 00 這個數實際就是:00 00 00 02 。從 02 開始,一個映射鍵是 02 ,兩個是03 ,依次遞加,十個是 0B 。
- 2個字節。 表示替換后按鍵的”掃描碼“。如:ESC 鍵的掃描碼是 01 ,所以就表示 01 00 。再如 左Ctrl鍵掃描碼是 1D 00, 而右Ctrl鍵是 1D E0 。
- 2個字節。 表示原按鍵的”掃描碼“。格式同上。
- 以四個 00 結束。
[鍵盤掃描碼]
以十六進制表示,分兩部份,0X后面兩個數是掃描碼,最后兩個數是 ASCII 碼(可忽略)。如 0x011b ESC 掃描碼是01。
掃描碼 鍵
0X011B ESC
0X3B00 F1
0X3C00 F2
0X3D00 F3
0X3E00 F4
0X3F00 F5
0X4000 F6
0X4100 F7
0X4200 F8
0X4300 F9
0X4400 F10
主鍵盤區:
0X2960 ~
0X0231 1
0X0332 2
0X0433 3
0X0534 4
0X0635 5
0X0736 6
0X0837 7
0X0938 8
0X0A39 9
0X0B30 0
0X0C2D -
0X0D3D =
0X2B5C "
0X0E08 退格鍵
0X0F09 TAB
0X1071 Q
0X1177 W
0X1265 E
0X1372 R
0X1474 T
0X1579 Y
0X1675 U
0X1769 I
0X186F O
0X1970 P
0X1A5B [
0X1B5D ]
0X1E61 A
0X1F73 S
0X2064 D
0X2166 F
0X2267 G
0X2368 H
0X246A J
0X256B K
0X266C L
0X273B ;
0X2827 '
0X1C0D 回車
0X2C7A Z
0X2D78 X
0X2E63 C
0X2F76 V
0X3062 B
0X316E N
0X326D M
0X332C ,
0X342E .
0X352F /
0X3920 空格鍵
右邊數字鍵盤:
0X5200 INSERT
0X4700 HOME
0X4900 PAGE UP
0X5300 DELETE
0X4F00 END
0X5100 PAGEDOWN
0X4800 上箭頭
0X4B00 左箭頭
0X5000 下箭頭
0X4D00 右箭頭
0X352F /
0X372A *
0X4A2D - (注意,這是數字鍵盤的)
0X4737 7
0X4838 8
0X4939 9
0X4B34 4
0X4C35 5
0X4D36 6
0X4E2B +
0X4F31 1
0X5032 2
0X5133 3
0X5230 0
0X532E DEL
左 Crtl 掃描碼是 1D ,表示 1D 00 。 右 Ctrl 鍵掃描碼是 E01D,表示 1D E0。
左 ALT 掃描碼是 38 ,表示 38 00 。 右 ALT 鍵掃描碼是 E0 38,表示 38 E0。
左 Shift 掃描碼是 2A ,表示 2A 00 。 右 Shift 鍵掃描碼是 36 ,表示 36 00
[示例]
1.屏蔽左側WIN鍵
"Scancode Map"=00,00,00,00,00,00,00,00,02,00,00,00,00,00,5B,E0,00,00,00,00
2.屏蔽右側WIN鍵
"Scancode Map"=00,00,00,00,00,00,00,00,02,00,00,00,00,00,5C,E0,00,00,00,00
3.屏蔽左右WIN兩個鍵
"Scancode Map"=00,00,00,00,00,00,00,00,03,00,00,00,00,00,5B,E0,00,00,5C,E0,00,00,00,00
4.替換左Crtl鍵為左Alt鍵
"Scancode Map"=00,00,00,00,00,00,00,00,02,00,00,00,38,00,1D,00,00,00,00,00
http://www.cnblogs.com/Rainr/archive/2012/01/21/2328046.html