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

Jon*_*ury 10 c++ windows subclass

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

Sho*_*og9 11

您需要将自己的代码注入拥有要拦截消息的窗口的进程中.幸运的是,SetWindowsHookEx()这使得这相当容易,但如果你刚才用它进行过程中的连接,你可能会遇到一些麻烦.

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

  1. Joseph Newcomber的钩子和DLL
  2. Robert Kuster 将您的代码注入另一个过程三种方法


Bob*_*ore 7

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

如果你还没有全系统挂钩工作之前,我有一个全系统钩子的例子在我的网站在这里.这是一个键盘钩子,但原理是一样的.

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