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

C++ 如何拦截发送到窗口的消息?,c++,windows,subclass,C++,Windows,Subclass,我想截获正在另一个进程中发送到窗口的消息。最好的方法是什么?当我使用WH_GETMESSAGE钩子时,我看不到消息,我不确定是否可以跨进程进行子类化?任何帮助都将不胜感激。如果消息是发送而不是发布的WH\u GETMESSAGE将看不到它。您需要WH\u CALLWNDPROC。如果您正在跨进程工作,则需要在DLL中使用系统范围的挂钩。您没有提到如何调用SetWindowsHookEx,因此我不知道您的挂接失败是因为它不是全局的,还是因为您要查找的消息已发送 如果您以前没有使用过系统范围的钩子,

我想截获正在另一个进程中发送到窗口的消息。最好的方法是什么?当我使用WH_GETMESSAGE钩子时,我看不到消息,我不确定是否可以跨进程进行子类化?任何帮助都将不胜感激。

如果消息是发送而不是发布的
WH\u GETMESSAGE
将看不到它。您需要
WH\u CALLWNDPROC
。如果您正在跨进程工作,则需要在DLL中使用系统范围的挂钩。您没有提到如何调用SetWindowsHookEx,因此我不知道您的挂接失败是因为它不是全局的,还是因为您要查找的消息已发送

如果您以前没有使用过系统范围的钩子,我的网站上有一个系统范围钩子的示例。这是一个键盘挂钩,但原理是一样的


如果我无意中在这里讲话,请阻止我-你的问题太简短,我无法推断你的专业水平。但是胡乱使用钩子确实意味着一些经验…

您需要将自己的代码注入到拥有您希望拦截消息的窗口的进程中。幸运的是,这样做相当容易,尽管如果您到目前为止只将其用于进程内连接,一开始可能会遇到一些麻烦

我可以推荐两篇关于这个主题的优秀文章:

  • 约瑟夫纽科姆酒店
  • 罗伯特·库斯特的

  • 对不起,我应该提供更多的细节。我确实让WH_CALLWNDPROC读取了消息,但我知道如何使用它从队列中删除消息?我想阻止某些消息到达目标窗口。然后不要将消息传递给CallNextHookExIt无论我是否调用CallNextHookExIt,消息始终到达目标窗口:(来自MSDN:“CallWndProc钩子过程可以检查消息,但不能修改它。钩子过程将控制权返回系统后,消息将传递给窗口过程”。这意味着您可以阻止消息进入下一个钩子过程,但不能进入收件人窗口。糟糕……可能会吞下击键(我已经这样做了),但看起来您无法接受发送的消息。很抱歉,花了这么长时间才看到此消息,我一直在发送婚礼请柬。不,不是我的婚礼:-)您需要设置一个系统范围的消息挂钩。