Capsと左Ctrlの入れ替えと、そのレジストリの意味

新年度になってマシン環境を変えることになり、一年間お世話になったVistaマシンからWindows 7へ。
んで、前からCapsと左Ctrlは入れ替えて使ってたので今回も入れ替えようと思ったのだが、やり方を忘れたのでグーグル先生に聞いてみた。


Windows 2000/XP/Vista/7 と設定方法は同じらしく、レジストリをいじればOK
やり方は
http://www.center-left.com/blog/archives/2007/02/windows_vistacaps_lockctrl.html
を参照。


それだけではつまらないので、レジストリファイルの意味を調べてみた。
http://www.jaist.ac.jp/~fujieda/scancode.html
http://www.losttechnology.jp/Tips/keyscancodemap.html
http://www.geocities.jp/makoko1974/w2ktips.htm
http://smallvoid.com/article/winnt-scancode-map.html
このあたりを参照。一番上がわかりやすかった。
一番下は英語だけど詳しい。


自分なりにまとめてみると、
ファイルの中身は

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,1d,00,3a,00,\
3a,00,1d,00,00,00,00,00

となっていて、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layoutというところに、Scancode Map というキーを追加してる。


その中身は、一つ一つの「,」での区切りが 16進数2桁で1 byte を表していて、4 bytes毎でひとかたまりのバイナリ型の値で構成されてる。
最初の4bytesがバージョン、次の4bytesフラグらしい。ここまでは0で埋める。
次の4bytesは末尾を示す0値を含めた値の数。つまり、キーを入れ替える数+1。
なんだけれども、実際に読み込まれる時には1 byteずつ逆順で読み込まれるそうなので、「03」が先頭になっている。


で、次からが、入れ替えるキーのスキャンコード。
元のコード、入れ替えるコードの順に指定して、これも逆順に読み込まれるので順番を入れ替える。

Caps Lock → Ctrl
0x003a (Caps Lock) + 0x001d (Ctrl)
↓つなげる
00,3a,00,1d
↓逆順
1d,00,3a,00

次はCtrl → Caps Lock を同様に。
今回は違うけれども、キーを無効にしたい場合は 入れ替えるコードを0x0000に指定すればOK。(つまり、00,00, の後に無効にするキーのスキャンコードを逆順で書けばいい。)


んで、最後が末尾を表す"0"(00,00,00,00)。


これで、スキャンコードさえわかればキーの入れ替えができる。
(スキャンコードの一覧も載せようと思ったんだけど、うまくまとまってるのがなかったので、自分で調べてください。すみません;)

最後に、レジストリいじるので、くれぐれも注意して自己責任で!