2017-05-09 4 views
0

は私がうまく、あるいは、例えば左のコントロールが押されていないときのWin32キーボードの管理は

WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP 

ので、私は知っているメッセージを介してキーボードの状態を追跡入力マネージャを持って集中しました。 しかし、ウィンドウがフォーカスを失ってキーが再びフォーカスを得る前に離されると、「キーを離しました」というメッセージは表示されません。

これは誰もが常に持っている非常に面倒な問題のように思われるので、私は何かが欠けているように感じます。今すぐウィンドウがフォーカスを得たときにGetKeyboardStateを使用する修正があります。しかし、これはちょっと残酷すぎるように感じます。

今私は "LowLevelKeyboardProc"があり、これは単に常にキーを検出することでこれを解決するのに役立つことがわかりました。しかし、これを使用することにはいくつかの欠点があります(すべてのアプリケーションのすべての入力を遅くするような感じです)。

私が紛失している解決策がいくつかありますか?そうでない場合、どちらの方が良い方法でしょうか?

+0

"*左のコントロールが押された時などは知っています。*"カスタム入力マネージャは必要ありません。代わりに 'Get(Async)KeyState()'を使ってください。 –

+0

_(すべてのアプリケーションのすべての入力を遅くするのと同じですか?)_:誰もそのタイプをすばやく入力します; –

+0

@remay 'GetAsyncKeystate()'はプログラムのコンテキストで動作します。独立したアクセスを2つの異なるスレッドに与える可能性はありますか?スレッドAがそれを呼び出す場合と同様に、Aによる最後の呼び出し(およびAのみ)は最後の呼び出しとしてカウントされます。 – Aedoro

答えて

-1

SetWindowsHookExのMSDNドキュメントを参照する必要があります。基本的には、キーの状態が変化したときに実行されるコールバックプロシージャ(アプリケーションの一部)でこの関数を使用します。

+1

通常、 'Raw Input API '(https://msdn.microsoft.com/en-us/library/windows/desktop/ms645536.aspx)が' SetWindowHookEx() 'よりも優先されます。 [MSDNでもそうだ](https://msdn.microsoft.com/en-us/library/windows/desktop/ms644985.aspx): "*アプリケーションが低レベルのフックを使用する必要があるほとんどの場合、 Raw入力は、低レベルのフックよりも効果的に他のスレッドを対象とするマウスとキーボードのメッセージを非同期に監視することができるためです。 –

関連する問題