あなたは窓の低レベルのためのグローバル入力フックAPI SetWindowsHookEx
を探しているあなたは、ここでより多くの情報を見つけることができます:https://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85).aspx
を具体的に、あなたが使用することを探しています次のような "低レベル"のマウスフック:
HHOOK mousehook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProc, NULL, 0);
このリンクあたりWindowsメッセージキューでこれを使用するには、D:
Why must SetWindowsHookEx be used with a windows message queue
低レベルのフック、WH_KEYBOARD_LLとWH_MOUSE_LLは、他のすべてのフックとは異なります。ターゲットプロセスにDLLを注入する必要はありません。その代わりに、Windowsは独自のプロセス内で直接フックコールバックを呼び出します。その作業を行うには、メッセージループが必要です。 Windowsが主スレッド上でコールバックを行う他のメカニズムはありません。コールバックは、Get/PeekMessage()を呼び出してWindowsを制御するときにのみ発生します。
WH_KEYBOARDのようなグローバルフックは非常に異なります。 DLLが必要で、キーボードメッセージを処理するプロセス内でコールバックが発生します。あなた自身のプログラムにこれを認識させるには、何らかのプロセス間通信が必要です。名前付きパイプは通常の選択です。そうでなければ、もちろん、この注入されたプロセスがメッセージループをポンピングすることを必要とする。それ以外の場合、キーボードメッセージは表示されません。
低レベルのフックを好むので、移動する方がはるかに簡単です。しかし、ポンプを作動させても動作しません。タイムアウトに注意してください。十分な応答が得られない場合、Windowsは予告なしにフックを壊します。
こんにちは、Josh あなたの答えをありがとう。 私はグローバルマウスフックを実装したばかりです。 私を助けることができますか? –
一般的にstackoverflowで、スレッドごとに1つの質問をします(これはこれを行います)。誰かが答えると、答えた印をつけてください。 2番目の質問がある場合は、新しいスレッドを作成します。ありがとう! – Josh