11

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

4

2 回答 2

11

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

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

  1. Joseph Newcomber 的Hooks 和 DLL
  2. Robert Kuster将代码注入另一个进程的三种方法
于 2009-05-09T18:23:30.850 回答
7

如果消息是发送而不是发布WH_GETMESSAGE,则不会看到它。你需要WH_CALLWNDPROC. 如果您正在跨进程工作,则需要在 DLL 中使用系统范围的挂钩。你没有提到你是如何调用 SetWindowsHookEx 的,所以我不知道你的钩子失败是因为它不是全局的,还是因为你正在寻找的消息是发送的。

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

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

于 2009-05-09T18:12:40.907 回答