1

IDirectInputDevice8 を介してキーボードの押下を取得する 3D アプリケーションがあります。win32 API winproc ループバックを介してキーボード イベントを取得するときに、これらのコマンドを DirectInputDevice に送信できる方法はありますか?

4

2 に答える 2

1

Windows は、バックグラウンドでキーボード ハードウェアをポーリングします。キー イベントが発生すると、それぞれの WM_* メッセージが Windows メッセージ キューに追加されます (キーボードの状態に関する関連情報と共に)。Windows メッセージ ポンプは、これらのメッセージをキューから引き出し、それに応じて処理します。このアプローチの主な利点は、キーボード イベントを取得するために実際に多くのことを行う必要がないことです (さらに、キーボード レイアウト/ハードウェアの知識は必要ありません)。欠点は、実際にはリアルタイムではないことです。

DirectInput を介してキーボードと対話することは実際には似ていますが、ポーリングを行うのはあなた次第です。通常、DirectInput を使用してキーボード デバイスをセットアップし、更新ループを実行するたびに、GetDeviceState()を使用してキーボードの状態をポーリングします。ポーリング間のキーボードの状態を追跡するのはあなた次第です。最善の方法は、この機能をラップするオブジェクトを作成し、おそらくイベント/コールバックを起動するか、適切なタイミングでキューにコマンド エントリを作成して、操作しやすくすることです。この方法の利点は、ハードウェアと直接やり取りしているため、速度が速く、更新を即座に呼び出すことができることです。不利な点は、この作業を手動で行う必要があり、セットアップと修正に少し時間がかかることです。

DirectInput を使用してキーボードをクエリする方法のこの例を確認してください。

したがって、あなたの質問に対するいくつかの答えがあります:

  1. WM_* メッセージが既にある場合は、DirectInput 処理が呼び出すコードを呼び出すだけで、同じ機能が得られるのではないでしょうか?
  2. DirectInput は、ポーリングを介して、Windows が WM_* メッセージを介して提供しているのと同じ情報を提供します。したがって、変換したり、一方を他方にマップしたりする必要はありません。キーの状態を確認し、状態が変化した場合に対処するだけです。
  3. 1 つの方法を選択し、もう 1 つの方法を捨てます。どちらも同じことをします。速度と応答性が必要な場合は、DirectInput を使用することをお勧めします。それがそれほど重要でない場合は、WM_* メッセージを使用してください。

それが役立つことを願っています。幸運を!

于 2008-10-27T10:02:05.057 に答える
0

wndproc には、キーボード イベントで次のメッセージの組み合わせが送信されます。

WM_SYSKEYDOWN
WM_SYSKEYUP
WM_KEYDOWN
WM_KEYUP 
WM_CHAR 
于 2008-10-26T23:12:19.640 に答える