Windows Vista/XP/2000/NT4.0のキー配列の変更方法

以下の説明は、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を入れ替えるためのレジストリファイルを置いておきます


藤枝@JAIST