【问题标题】:Sending forward windows message发送转发窗口消息
【发布时间】:2013-06-24 19:16:48
【问题描述】:

比如我刚刚调用了GetMessage(或者我在CallWndMsg钩子回调中),得到了lParam和wParam。

可以使用 SendMessage 或 PostMessage 将此消息重新发送到使用刚刚收到的 lParam 和 wPAram 的其他进程的窗口,而无需深度处理。我的意思是如果这些参数(通常包含用于复合结构的指针)在重新发送期间仍然有效,或者我可能会遇到内存违规问题(或类似问题)? 如果可以的话,系统如何决定何时可以释放和删除lPAram和wPAram?

PS 似乎我不能为 WM_COPYDATA 这样做,因为 msdn 指出所有传递的数据只有在消息处理程序工作时才有效/但是对于其他消息来说呢。

【问题讨论】:

  • 如果你使用SendMessage,它应该阻塞它被调用的地方,所以lParamwParam变量应该保持有效。
  • 感谢您的回复。如果我使用 PostMessage 或 PostThreadMessage 会发生什么?

标签: c++ winapi messages


【解决方案1】:

您不应将指针从进程 A 传递给进程 B,在进程 B 中,此类指针(地址)可能指向已释放的内存或某些其他结构使用的内存。 WM_COPYDATA 是在进程之间传递数据的一种方式,您实际上可以将每个消息打包成二进制数组,使用 WM_COPYDATA 将其发送到其他进程,然后在第二个进程中将其解包,然后将解包后的消息发送给自己。

在进程之间传递 lParam 和 wPAram 的唯一安全方法是当它们只包含 DWORD 数据时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 2019-09-28
    • 1970-01-01
    相关资源
    最近更新 更多