【发布时间】:2009-05-09 17:31:40
【问题描述】:
我想拦截发送到不同进程中窗口的消息。做这个的最好方式是什么?使用 WH_GETMESSAGE 挂钩时看不到消息,并且不确定是否可以跨进程进行子类化?任何帮助将不胜感激。
【问题讨论】:
-
您需要设置系统范围的消息挂钩。 Here is a tutorial.
我想拦截发送到不同进程中窗口的消息。做这个的最好方式是什么?使用 WH_GETMESSAGE 挂钩时看不到消息,并且不确定是否可以跨进程进行子类化?任何帮助将不胜感激。
【问题讨论】:
您需要将自己的代码注入到拥有您希望从中截取消息的窗口的进程中。幸运的是,SetWindowsHookEx() 使这变得相当容易,尽管如果您到目前为止只将它用于进程内连接,一开始您可能会遇到一些麻烦。
我可以推荐两篇关于这个主题的优秀文章:
【讨论】:
如果消息是发送而不是发布,WH_GETMESSAGE 将不会看到它。你需要WH_CALLWNDPROC。如果您正在跨进程工作,则需要在 DLL 中使用系统范围的挂钩。你没有提到你是如何调用 SetWindowsHookEx 的,所以我不知道你的钩子失败是因为它不是全局的,还是因为你正在寻找的消息是sent。
如果您以前没有使用过系统范围的钩子,我的网站here 上有一个系统范围的钩子示例。那是键盘钩子,但原理是一样的。
如果我无意中在这里说话,请阻止我 - 你的问题太短了,我无法推断你的专业水平。但是搞乱钩子确实意味着一些经验......
【讨论】: