Scancode Mapの書き方

筆者は英語キーボード使いだ。
以前は日本語キーボードマンセー、だったのだが、米国に居住して米国の会社に勤務している以上、どうしたって英語キーボードを支給される・使うことになることが多い。
止むを得ず数年前に英語キーボードに切り替えたのだ。
当然ながら日本語入力は必要だ。
"Alt"+"~"などと2アクションで日本語/英語切り替えはマンドクサイので、AXキーボードマップを常用している。
これだと、普段ほとんど使わない左Altで日本語/英語切り替えができるようになる。
更に右Altと左Altを切り替えて、左親指で日本語/英語切り替えができるようにしてあるので、このような日本語英語混じりの文章でも楽に入力ができる。
更にこのようなApple帝国の嫌がらせもあるので、これにも負けずにWindows PCを使っていくためにはscancode mapの変更は不可欠だ。


Scancode mapの変更はレジストリーキー"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout"の下に、"Scancode map"バイナリー値を作成して記入すればよい。
f:id:nobu_macsuzuki:20211018071152p:plain

  • ヘッダはDWORD 0x00000000を2つにフッタも含めたエントリー数をDWORDで
  • 各エントリーはDWORD
  • 最後にDWORD 0x00000000のフッタを付ける

エンディアンはリトルエンディアンなので、エントリー数の3はバイト列では"03 00 00 00"となっている。


次に各エントリー。
f:id:nobu_macsuzuki:20211018071559p:plain
この部分もリトルエンディアンなので、DWORD値は0xE0380038。
MSBのWORD値(0xE038)がもともとのキーのscancode値。
LSBのWORD値(0x0038)がそのキーに割り当てたいscancode値。
この例だと、右Alt(0xE048)を押すと左Alt(0x0038)を押したことになる。
次のエントリーはこの逆なので、この2つで右Altと左Altが入れ替わる。


各キーのscancode値はこちらによくまとまっている。
www.ipentec.com