0

これを使用しています:

SetWindowsHookEx(WH_CALLWNDPROC, ...);

処理したいメッセージは表示されますが、それらのメッセージがターゲットウィンドウに到達しないようにしたいです。だから私はこれを試しました:

SetWindowsHookEx(WH_GETMESSAGE, ...);

これを行うと、メッセージを変更して、ターゲットウィンドウがメッセージを処理できないようにすることができますが、このフックは、処理する必要のあるメッセージを認識しません。これは、送信ではなく、ターゲットウィンドウのキューに投稿されているためだと思いますか?この問題を回避する方法はありますか?ウィンドウのサブクラス化でこれを実現できる可能性があると聞きましたが、別のプロセスでウィンドウをサブクラス化できますか?フックを使用してこれを行う方法はありますか?

4

3 に答える 3

1

別のプロセスでウィンドウをサブクラス化することはできませんが、フック DLL は、関心のあるウィンドウをサブクラス化できる必要があります。WH_GETMESSAGE および WH_CALLWNDPROC フックは、メッセージを受信するプロセスのコンテキストで実行されるため、その時点でターゲットのウィンドウをサブクラス化するための「in」。

于 2009-05-09T19:57:00.437 に答える
0

ターゲット ウィンドウをサブクラス化してから、メッセージをフィルター処理することができます。

于 2009-05-09T07:25:49.357 に答える
0

フックのドキュメントはこれができないことを示唆していますが、私はこの戦略がうまくいくと思います: setWindowsHookEx(WH_CALLWNDPROC, ... ) を使用してください

この手順では、破棄したいメッセージを未使用の WM_ 値に変更するだけです。

LRESULT CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
{
   CWPSTRUCT *C=(CWPSTRUCT *)lParam;

   if ( ...we are interested in this one) {
     ..deal with this message here...
     //Modify the message so that the client will ignore it
     C->message=WM_USER+44; //presumably ignored by client
   }       
   return GetNextHook(...);
}

面倒だけど簡単?

于 2009-08-17T17:35:46.400 に答える