プロセス内のすべてのスレッドのためのフックをインストールすることはできません
-
21-09-2019 - |
質問
私は、アプリケーションでキーボードをフックしています。要件は、プロセス内のすべてのスレッドでキーボードをフックすることです。
私は使用は、SetWindowsHookEx API
SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)::KeyboardHookProc, hInst, 0);
フックは、プロセス内のすべてのスレッドのために作成されます。 これは、スレッドはすぐにスレッドがフック止め作業を終了呼び出しとしての.asを存在呼び出すまでの罰金を動作します。
プロセスにおけるプロセスではなくスレッドにフックする方法はあります。
解決
LowLevelKeyboardProcためのSDKドキュメントのこの細かいプリントは非常に重要です。
はこのフックは、それをインストールしたスレッドのコンテキストで呼び出されます。コールは、フックをインストールしたスレッドにメッセージを送信することにより行われます。そのため、フックをインストールスレッドがメッセージループを持っている必要があります。の
言い換えれば、あなたは生きているスレッドを維持する必要がありますし、スレッドがメッセージループをポンプしなければなりません。あなたが今見動作は仕様によって完全である。
他のヒント
として、パーMSDNには、をWH__KEYBOARD ___ LL のアプリケーション固有のグローバルません適用されます。
あなたは、特定のスレッドが使用プロセスのためのフックをインストールする場合の WH ___キーボードの。
ジャストメイン機能にフックを取り付けます。あなたはそれがときにのみ、特定のスレッドの実行が必要な場合は、揮発性のフラグを使用することができます。
所属していません StackOverflow