如何拦截发送到窗口的消息?

11

我想拦截发往不同进程窗口的消息,有什么最好的方法吗? 当我使用WH_GETMESSAGE钩子时无法看到消息,而且我不确定是否可以在进程间进行子类化? 希望能得到帮助。


你需要设置一个系统范围的消息钩子。这里有一个教程 - Reed Copsey
2个回答

11

7
如果消息是发送而不是发布,WH_GETMESSAGE 将无法看到它。您需要使用 WH_CALLWNDPROC。如果您正在跨进程工作,则需要在 DLL 中使用系统范围的钩子。您没有提及如何调用 SetWindowsHookEx,因此我不知道您的挂钩失败是因为它不是全局的,还是因为您要查找的消息被发送了。
如果您以前没有使用过系统范围的钩子,请访问我的网站这里,其中有一个系统范围的钩子示例,那是一个键盘钩子,但原理是相同的。
如果我无意中说得太简单了,请告诉我 - 您的问题非常简短,我无法推断您的专业水平。但是,对挂钩进行操作确实需要一些经验...

1
抱歉,我应该提供更多细节。我确实使用了WH_CALLWNDPROC来读取消息,但是我如何使用它从队列中删除消息呢?我想要防止某些消息到达目标窗口。 - Jon Tackabury
那么就不要将消息传递给CallNextHookEx。 - Bob Moore
无论我是否调用CallNextHookEx函数,消息总是会到达目标窗口。:( - Jon Tackabury
1
来自MSDN: "CallWndProc钩子过程可以检查消息,但不能修改它。钩子过程将控制返回给系统后,消息将传递到窗口过程"。这意味着您可以防止消息传递到下一个hookproc,但无法阻止其传递到接收方窗口。遗憾... - Bob Moore
1
可以吞噬按键(我已经做过了),但似乎无法吞噬发送的消息。很抱歉这么晚才来看这个问题,我一直在派送婚礼请柬。不,不是我的婚礼 :-) - Bob Moore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接