2013-02-25 14 views
5

Many exampleskeybd_eventの場合、bScanパラメータの値は0x45です。keybd_eventのbScanパラメータ値0x45の意味は何ですか?

0x45値の意味は?

私は印象には0x45 was a keyboard scancodeでしたが、それはさまざまな数のキーに使用されているので、それ以上はそれほど確かではありません。

私の目標は、.NET P/Invoke、またはDelphiからkeybd_eventを使用し、型をより制限的(enumまたはフラグ付き列挙型など)にして、コードのメンテナンスが容易になるようにすることです。

答えて

5

実際にはスキャンコードであり、多くのキーボードではNumLockキーのスキャンコードです。

keybd_eventのドキュメントに添付されているサンプルコードは、NumLockの状態を切り替える方法の例です。したがって、当然0x45がスキャンコードとして使用されます。私の推測では、あなたが見つけた多くの他の例は、単にMSDNのkeybd_eventの値から盲目的にコピーされているだけです。 applications typically ignore the scan code以降、仮想キーコードに応答すると、通常、スキャンコードとして渡される値は関係ありません。

最後に、keybd_eventではなくSendInputを使用します。なぜなら、前者はキューに一連のイベントを配置できるからです。 keybd_eventを使用すると、一度に1つずつキューにイベントが配置され、偽のイベントが実際のイベントに散在する可能性があります。この問題は、SendInputが導入された主な理由の1つです。

+1

デルファイは、スキャンコード情報を無視します。例えば、 'OnKeyDown'イベントを生成すると、誰かがキースキャンコードを抽出する必要がある場合、対応するウィンドウメッセージ(例:WM_KEYDOWN)を直接処理する必要があります。 – kludg

+0

ありがとうございます。私は[SendInput](http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310)と[P/Invoke SendInput](http://www.pinvoke.net/default。 aspx/user32.sendinput)ショット。後でこれに戻ります。 –

関連する問題