質問: Windows 7 を利用しています。 レジストリをいじってキーの入れ替えを行おうとしています。 このためには、入れ替えたいキーのスキャンコードを知っておく必要がありますが、 今入力したキーを表示するような機能 (方法) はありますか? できれば、追加ソフト(よくわからないソフト)はインストールしないほうが望ましいです。 もし追加ソフトが必要なら、ソースが公開されているもののほうが望ましいです。 (セキュリティ的な観点で)
回答: Windows の標準コマンドだけで調べる方法を真剣にネタ回答してみます。 IBM/PC というか PS/2 互換機の 16bit BIOS を呼び出してみましょう。 (NEC PC98 は考慮しません) (実際に動くのは 32bit Windows 内部の BIOS シミュレータですけど) キースキャンコードは PC-BIOS コール `INT 16H` `AH=10H` で取得できますから 32bit Windows (Windows 7/XP では確認済み Windows 8 32bit は手元に無いので未確認) なら コマンドプロンプトから `debug.exe` を起動してハンドアセンブル入力しましょう。 `debug.exe` の `a` はアセンブル `g` は実行 `q` は終了コマンドです。 ``` C>debug -a 351B:0100 MOV AH,10 351B:0102 INT 16 351B:0104 INT 3 351B:0105 のみ -g ``` ここでキー入力待ちになるので調べたいキーを押します。 ESC キーを押してみました。 ``` AX=011B BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=351B ES=351B SS=351B CS=351B IP=0104 NV UP EI PL NZ NA PO NC 351B:0104 CC INT 3 -q C> ``` `AH=01` がスキャンコード `AL=1B` がキーコード (ASCII) です。 複数回実行したかったら `q` せずに `g=100` でもう一度実行できます。 64bit Windows は 16bit code を実行できないのでこの方法は使えません。 既にレジストリでキーマップを入れ替えていると、 この方法で得たコードは入れ替えた後のコードになっています。 [窓] キーなど Windows 内部で処理が完結するキーのコードは調査しようがありません。 実用度は低いです(まあネタですし)。