0

私はwin7 64ビットを使用しています。GetKeyboardState() を使用してキーボードの状態を取得します。

BYTE keyState[256];
GetKeyboardState(keyState);
BOOL leftButtonClicked = GetKeyState(VK_LBUTTON);

メイン wnd 内をクリックするとすべて問題ありませんが、メイン wnd の外側をクリックしても leftButtonClicked は true のままです。

msdnは言った、

アプリケーションは、この関数を呼び出して、すべての仮想キーの現在のステータスを取得できます。スレッドがメッセージ キューからキーボード メッセージを削除すると、ステータスが変化します。キーボード メッセージがスレッドのメッセージ キューにポストされても、ステータスは変化しません。また、キーボード メッセージが他のスレッドのメッセージ キューにポストされたり、メッセージ キューから取得されたりしても、ステータスは変化しません。

しかし、main wnd は WM_LBUTTONDOWN を受け取らないのに、なぜこの関数は間違った結果になるのでしょうか? または私は何かを誤解しましたか?

ありがとう。

4

1 に答える 1

2

GetKeyboardState と GetKeyStateは、キーボードとマウスのバッファリングされた状態を返します。最後の入力イベントがメッセージ キューに入力されたときに格納されます。重要な機能として、プログラムがメッセージをポンピングしていない場合、メッセージはしばらくの間キューに保存されたままになることがあります。

ウィンドウの外側をクリックすると、生成された入力イベントは、クリックしたウィンドウに関連付けられているキューに移動します。プログラムのキューではありません。したがって、キーボードの状態は変化しません。

現在の状態を取得するには、GetAsyncKeyState() を使用する必要があります。

于 2013-03-04T01:48:13.297 に答える