ウィンドウズで、今入力されたキースキャンコードを表示するには？


Windows 7 を利用しています。  
レジストリをいじってキーの入れ替えを行おうとしています。  
このためには、入れ替えたいキーのスキャンコードを知っておく必要がありますが、  
今入力したキーを表示するような機能 (方法) はありますか？

できれば、追加ソフト(よくわからないソフト)はインストールしないほうが望ましいです。  
もし追加ソフトが必要なら、ソースが公開されているもののほうが望ましいです。  
(セキュリティ的な観点で)




Windows の標準コマンドだけで調べる方法を真剣にネタ回答してみます。

IBM/PC というか PS/2 互換機の 16bit BIOS を呼び出してみましょう。  
(NEC PC98 は考慮しません)  
(実際に動くのは 32bit Windows 内部の BIOS シミュレータですけど)

キースキャンコードは PC-BIOS コール `INT 16H` `AH=10H` で取得できますから  
<https://en.wikipedia.org/wiki/INT_16H>  
32bit Windows (Windows 7/XP では確認済み Windows 8 32bit は手元に無いので未確認) なら  
コマンドプロンプトから `debug.exe` を起動してハンドアセンブル入力しましょう。  
`debug.exe` の `a` はアセンブル `g` は実行 `q` は終了コマンドです。

[code]

    C>debug
    -a
    351B:0100 MOV AH,10
    351B:0102 INT 16
    351B:0104 INT 3
    351B:0105 <Enter> のみ
    -g
    
[/code]

ここでキー入力待ちになるので調べたいキーを押します。 ESC キーを押してみました。

[code]

    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>
    
[/code]

`AH=01` がスキャンコード `AL=1B` がキーコード (ASCII) です。

複数回実行したかったら `q` せずに `g=100` でもう一度実行できます。

64bit Windows は 16bit code を実行できないのでこの方法は使えません。  
既にレジストリでキーマップを入れ替えていると、  
この方法で得たコードは入れ替えた後のコードになっています。  
[窓] キーなど Windows 内部で処理が完結するキーのコードは調査しようがありません。  
実用度は低いです（まあネタですし）。




Windows の標準コマンドだけで調べる方法を真剣にネタ回答してみます。

IBM/PC というか PS/2 互換機の 16bit BIOS を呼び出してみましょう。  
(NEC PC98 は考慮しません)  
(実際に動くのは 32bit Windows 内部の BIOS シミュレータですけど)

キースキャンコードは PC-BIOS コール `INT 16H` `AH=10H` で取得できますから  
<https://en.wikipedia.org/wiki/INT_16H>  
32bit Windows (Windows 7/XP では確認済み Windows 8 32bit は手元に無いので未確認) なら  
コマンドプロンプトから `debug.exe` を起動してハンドアセンブル入力しましょう。  
`debug.exe` の `a` はアセンブル `g` は実行 `q` は終了コマンドです。

[code]

    C>debug
    -a
    351B:0100 MOV AH,10
    351B:0102 INT 16
    351B:0104 INT 3
    351B:0105 <Enter> のみ
    -g
    
[/code]

ここでキー入力待ちになるので調べたいキーを押します。 ESC キーを押してみました。

[code]

    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>
    
[/code]

`AH=01` がスキャンコード `AL=1B` がキーコード (ASCII) です。

複数回実行したかったら `q` せずに `g=100` でもう一度実行できます。

64bit Windows は 16bit code を実行できないのでこの方法は使えません。  
既にレジストリでキーマップを入れ替えていると、  
この方法で得たコードは入れ替えた後のコードになっています。  
[窓] キーなど Windows 内部で処理が完結するキーのコードは調査しようがありません。  
実用度は低いです（まあネタですし）。

