2004-03-03(Wed) [長年日記]
■1 Windows XPでのキーマップ
「ほんぶちょ日記」経由でキーマップのレジストリの読み方を知る。「CtrlとCapsLockを入れ替えるにはレジストリをこう変更すればよい」みたいな記述はいくつか見つけていた——が、そこで挙げられているものと私のレジストリは全然違うので途方に暮れていたところ。救われる思い。備忘のためにここにも記録しておくことにする。
対象となるレジストリの位置と内容(現状)
先述のページの解説に従って身に覚えのない自分のマシンのレジストリを解読。キーコードの一覧も参考にした。
設定対象のレジストリは HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -> Control -> Keyboard Layout -> Scancode Map と。ここでバイナリの値を直接イジるらしい。現在の私の設定値:
0000 00 00 00 00 00 00 00 00 0008 06 00 00 00 29 00 01 00 0010 3A 00 1D 00 01 00 29 00 0018 1D 00 3A 00 39 00 79 00 0020 00 00 00 00
最初の8バイトはヘッダだそうな。次の4バイト(?)は、(ターミネータを含む)エントリ数。私の場合は6なので、5箇所に変更を加えたようだ。エントリ数の後には、キーマップ変更エントリがそれぞれ続く。これは1エントリあたり4バイトで表現するようだ。「機能->キー割当」という関係をそれぞれ2バイトで記述する*1ので、1組あたり4バイト。これに従えば上記バイナリはすなわち:
- 0029(全角/半角)機能を0001(ESC)キーに
- 003A(CapsLock)機能を001D(左Ctrl)キーに
- 0001(ESC)機能を0029(全角/半角)キーに
- 001D(左Ctrl)機能を003A(CapsLock)キーに
- 0039(Space)機能を0079(変換)キーに
- ターミネータ(0000 0000)
きっちりレジストリレベルで変更をしていた……。どうやら5番目のキーマップ変更は私なりの「スペースバーを返せ運動」のつもりのようだ。確かに変換をスペースキーと間違ってタイプしまくっていた記憶はある。しかし、この割付を行った記憶はさっぱり甦らない。
左CtrlキーにESC機能を割り当ててみる
以下のように変更:
0000 00 00 00 00 00 00 00 00 0008 03 00 00 00 01 00 1D 00 0010 1D 00 3A 00 00 00 00 00
- 0001(ESC)機能を001D(左Ctrl)キーに
- 001D(左Ctrl)機能を003A(CapsLock)キーに
CapsLock機能が無くなっちゃったけど、使ったことないし構わないだろう。で、肝心のESC機能は左Ctrlキーに割り当ててみたが……ビミョウ。馴染めなかったらまた考えよう。
追記
これを書いている間に入れ替え人氏からもツッコミ。どうにかキーマップは自らの制御下に置く事が出来るようになりました。
*1 Windowsのバイナリはリトルエンディアンなので、キーマップの記述は下から積んでいく模様。