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

我想拦截正在发送到不同进程中的窗口的消息。 做这个的最好方式是什么? 当我使用WH_GETMESSAGE钩子时,我看不到消息,而且我不确定是否可以跨进程子类化? 任何帮助将非常感激。

您需要将自己的代码注入拥有您希望拦截邮件的窗口的进程中。 幸运的是, SetWindowsHookEx()使得这个过程变得相当简单,但是如果你仅仅使用它来进行进程间的连接,那么你可能会遇到一些麻烦。

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

  1. Joseph Newcomber的钩子和DLL
  2. 罗伯特·卡斯特的三种方法将你的代码注入另一个进程

如果邮件发送而不是发布WH_GETMESSAGE不会看到它。 你需要WH_CALLWNDPROC 如果你在跨进程工作,你需要一个DLL中的系统范围的钩子。 你没有提到你如何调用SetWindowsHookEx,所以我不知道你的挂钩失败,因为它不是全球性的,或者因为你正在寻找的消息被发送

如果你之前没有使用系统级的钩子,我在这里有一个在我的网站上的系统钩子的例子。 这是一个键盘钩子,但原理是一样的。

如果我无意中在这里讲话,阻止我 – 你的问题太短,我不能推断你的专业水平。 但搞乱勾子确实意味着一些经验…