0

アプリケーションでキーボードをフックしています。要件は、プロセス内のすべてのスレッドでキーボードをフックすることです。

SetWindowsHookExAPIを使用しました

SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)::KeyboardHookProc, hInst, 0);

フックは、処理中のすべてのスレッドに対して作成されます。これは、呼び出しスレッドが存在するまで正常に機能します。呼び出しスレッドが終了するとすぐに、フックは機能を停止します。

プロセス内のスレッドではなく、プロセスにフックする方法はありますか?

4

3 に答える 3

2

LowLevelKeyboardProcのSDKドキュメントでのこの細かい印刷は非常に重要です。

このフックは、それをインストールしたスレッドのコンテキストで呼び出されます。呼び出しは、フックをインストールしたスレッドにメッセージを送信することによって行われます。したがって、フックをインストールしたスレッドにはメッセージループが必要です。

つまり、スレッドを存続させ、スレッドがメッセージループをポンピングする必要があります。現在表示されている動作は完全に仕様によるものです。

于 2009-11-24T18:45:11.917 に答える
0

MSDNによると、WH__KEYBOARD ___ LL は、アプリケーション固有ではなく、グローバルに適用されます。

プロセス固有のスレッドにフックをインストールする場合は、 WH___KEYBOARDを使用します。

于 2009-11-24T10:15:20.087 に答える
0

main関数にフックを取り付けるだけです。特定のスレッドが実行されているときにのみ必要な場合は、揮発性フラグを使用できます。

于 2009-11-24T17:08:39.117 に答える