以下の説明は、Microsoftの技術文書Scan Code Mapper for Windowsを元にしています。
regeditで以下のレジストリキーを新規作成します。
HKEY_LOCAL_MACHINE \System \CurrentControlSet \Control \KeyBoard Layout \Scancode Map
Windows Vista/XPの場合には以下のレジストリキーを作成すると、今ログオンしているユーザだけが対象になります。
HKEY_CURRENT_USER \KeyBoard Layout \Scancode Map
Scancode Mapの値の型はバイナリで、 以下の仕様に基づいて作成します。
DWORD: 0x00000000 ヘッダ DWORD: 0x00000000 ヘッダ DWORD: 末尾のヌルも含めた続くDWORDの個数 DWORD: マッピング1 ... DWORD: マッピングn DWORD: 0x00000000 末尾のヌル
マッピングは入力スキャンコードを上位2バイトで、 出力スキャンコードを下位2バイトで示します。 Caps Lock(0x3a)を左Control(0x1d)にする場合には値は0x003a001dとなります。 この場合の設定するバイナリ値は以下の通りです(i386の場合)。
0000 0000 0000 0000 0200 0000 1d00 3a00 0000 0000
DWORDが下位バイトから順に展開されることに注意してください。 空白は見やすくするために入れたものです。実際に入力する際には必要ありません。 左ControlとCaps Lockを入れ換える場合には以下の値を設定します。
0000 0000 0000 0000 0300 0000 1d00 3a00 3a00 1d00 0000 0000
キーを殺す場合には0x0000を割り当ててください。 例えば、両方のWindowsキーを殺す場合には以下の値を設定します。
0000 0000 0000 0000 0300 0000 0000 5be0 0000 5ce0 00 00 00 00
値の作成にはAdministratorの権限が必要です。 設定した値は再起動した後に有効になります。 Windows Vista/XPで今ログオンしているユーザだけを対象にする場合には、Administrator権限は必要ありません。 設定はログオンしなおすことで有効になります。 Control、Alt、Deleteの設定を変えるときには注意してください。 この三つのどれかがキーボード上に存在しなくなると、ログオンできなくなる場合があります。
よく変更されるキーのスキャンコードを示しておきます。
スペース 0x39 半角/全角(漢字) 0x29 Esc 0x01 英数(Caps Lock) 0x3a 左Ctrl 0x1d 右Ctrl 0xe01d 左Alt 0x38 右Alt 0xe038 無変換 0x7b 変換 0x79 ¥|(*) 0x7d ひらがな(カタカナ)0x70 Num Lock 0x45 Scroll Lock 0x46 F1-F10 0x3B-0x44 F11-F12 0x57-0x58 左Windows 0xe05b 右Windows 0xe05c Application 0xe05d
(*) 101配列のドライバを106配列のキーボードに使ったとき。
左ControlとCaps Lockを入れ替えるためのレジストリファイルを置いておきます。