windowsのキーボードマップをいじる

キーボード上の任意のキーを、別の任意のキーに変更して使用する、windowsレジストリ設定。
以前、どこかで見つけた情報だけど、今回改めて探したら見つからない。しょうがないので、断片的な情報からまとめておく。
要再起動。
目的は、ノートPCのキーボードの'A'の左側のキーをctrlキーにする。つまり、caps lockキーを左ctrlキーとして使いたい。caps lockキーなんて不要なので、入れ替えるんじゃなくて、上書き。結果は、左ctrlキーが二つになる。

レジストリエントリ仕様

key
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
entry
Scancode Map
type
binary, little endian
value
下記参照

  scancode_map_value()  // 上記 "value"
  {
    version;  // 0x00000000
    flag;     // 0x00000000
    data_count; // including terminater 4bytes
    for( int index = 0; index < data_count - 1; ++index )
    {
      data();
    }
    terminater; //0x00000000
  }

  data()
  {
    replacing_key_scancode;  // 2bytes
    original_key_scancode;  // 2bytes
  }

key_scancode
ctrl0x001d
caps lock0x003a

regファイルのサンプル

caps lockをctrlに

REGEDIT4

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


caps lockとctrl入れ替え

REGEDIT4

[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


追記(2006/12/27):data_countのバイト幅を追加。