Scancode Map
キーボードのキー割り当ての変更をレジストリのScancode Mapを変更することで可能になります。
Scancodeは、キーボードでキーが入力された際にキーボードからCPUに送られてるコードの事です。
Scancode MapはScancodeの変換テーブルのことで、これを設定することでキー割り当ての変更をすることが可能です。
Scacode Mapはレジストリの
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
の下に「Scancode Map」というバイナリ値で作成します。
フォーマット
Scancode Mapはヘッダーの後ろにキー割り当ての情報を入れ、最後にキー割り当て終端を意味するヌル値(0のこと)を入れます。
ヘッダーに記入するキーの割り当て数(マッピング数)ですが、これは最後に入れるヌル値を含める事と、Windowsはリトルエンディアンのため、値が前詰めになることに注意してください。
ヘッダー:バージョン(すべて0) | 4 byte |
ヘッダー:フラグ(すべて0) | 4 byte |
ヘッダー:マッピング数 | 4 byte |
キー割り当て | -- |
Null | 4 byte |
キー割り当ては、4byte値で表現し、前2byteが変換前のキー、後2byteで変換後のキーを表します。
例えば、Caps Lock(0x3A)を左Ctrl(0x1D)に変換する場合、0x003A001Dとなりますが、これもリトルエンディアンを意識する必要があるので、書く時は「1D 00 3A 00」になります。
例:「左Ctrl <-> Caps lock」「無変換 -> Enter」「変換 -> Back Space」
Scancode Map
00 00 00 00 00 00 00 00
05 00 00 00 1D 00 3A 00
3A 00 1D 00 1C 00 7B 00
0E 00 79 00 00 00 00 00
解説
バイナリ | 値 | 説明 |
---|---|---|
00 00 00 00 | 0x00000000 | バージョン |
00 00 00 00 | 0x00000000 | フラグ |
05 00 00 00 | 0x00000005 | マッピング数 |
1D 00 3A 00 | 0x003A001D | Caps Lock(0x1D) -> Enter(0x1D) |
3A 00 1D 00 | 0x001D003A | Enter(0x1D) -> Caps Lock(0x1D) |
1C 00 7B 00 | 0x007B001C | 無変換(0x7B) -> Enter(0x1C) |
0E 00 79 00 | 0x0079000E | 変換(0x79) -> Back Space(0x0E) |
00 00 00 00 | 0x00000000 | 終端ヌル値 |
Scancode
左Ctrl | 0x1D |
Caps Lock | 0x3A |
Enter | 0x1C |
無変換 | 7B |
Back Space | 0x0E |
変換 | 0x79 |
参考
MSDN Keyboard and mouse class drivers - Scan code mapper for keyboards