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 回答