Windows用注冊(cè)表修改鍵盤映射(掃描碼)

序
使用C/C++代碼方式修改可見下篇專欄《用C/C++(Win32API)寫軟件修改鍵位》
據(jù)說Qwerty鍵盤是為了降低打字員打字速度,防止打字機(jī)卡機(jī)所作出的妥協(xié)。那么現(xiàn)在的鍵盤是否降低了咱敲代碼的速度?試試看換成其他的鍵盤布局吧。
注:注冊(cè)表修改映射的方法比較麻煩,但適用性還挺高,不需要依靠其他軟件,所以不會(huì)被軟件或游戲認(rèn)定為作弊。
注:常用快捷鍵Ctrl+Z、Ctrl+C等可能會(huì)變的不方便。

確定目標(biāo)
首先明確要將鍵盤修改成什么樣子,我以網(wǎng)上[1]找到的一種鍵盤布局為例。

注:這里的修改僅限于主鍵盤區(qū)26個(gè)字母(其實(shí)只修改了25個(gè)x)。
修改方法
首先打開注冊(cè)表(Win+R輸入regedit并運(yùn)行),并且進(jìn)入目錄:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
在該目錄下右鍵點(diǎn)擊新建二進(jìn)制值,名稱為Scancode Map,并打開。
接下來按照如下格式[2]輸入自己需要更改的鍵位:
00 00 00 00 00 00 00 00(固定格式)
XX 00 00 00(XX為修改的總鍵數(shù)+1的16進(jìn)制數(shù))
XX XX XX XX(修改后的按鍵掃描碼(在前)+原按鍵的掃描碼(在后))
XX XX XX XX(另一個(gè)要替換的按鍵,同上)
......
00 00 00 00(固定格式)
以上就是修改鍵位的格式,理論上可以修改254個(gè)鍵(包含鍵盤所有鍵有余)。
其中提到的掃描碼是一個(gè)16進(jìn)制數(shù)字,每個(gè)代表一個(gè)鍵,掃描碼表如下(左列為高位、右列為低位):

例如1D 00 5B E0代表了用左Ctrl鍵(1D 00)替換左Win鍵(5B E0)
我替換26字母則需要打如下的碼(此處U映射不變,所以共替換25個(gè),25+1的16進(jìn)制數(shù)為1A):
00 00 00 00 00 00 00 00
1A 00 00 00 2D 00 10 00
30 00 11 00 18 00 12 00
14 00 13 00 23 00 14 00
11 00 15 00 15 00 17 00
22 00 18 00 32 00 19 00
13 00 1E 00 26 00 1F 00?
2E 00 20 00 17 00 21 00
1E 00 22 00 12 00 23 00
31 00 24 00 2C 00 25 00
24 00 26 00 25 00 2C 00
2F 00 2D 00 10 00 2E 00
20 00 2F 00 21 00 30 00
1F 00 31 00 19 00 32 00
00 00 00 00
一切準(zhǔn)備妥當(dāng)后,確定并關(guān)閉。

最后重啟(或注銷并重新登錄)電腦就可以使用新的鍵盤映射啦。
注:若要回到默認(rèn)映射,在注冊(cè)表中刪除本Scancode Map文件即可。

引用圖片


參考資料
[1] 給中國人的鍵盤 —適合中英文雙輸入的鍵盤布局(http://www.docin.com/p-23672137.html)
[2]?Windows10 修改鍵位映射(https://blog.csdn.net/lhdalhd1996/article/details/90741092)
QQ:2639914082