【发布时间】:2018-06-01 17:45:54
【问题描述】:
我们正在从一个进程 (process01) 向另一个进程 (process02) 发送一条 Win32 消息。
Console.WriteLine(targetHandle); // 0x3072a
SendMessageTimeout(
targetHandle,
WM_COPYDATA,
IntPtr.Zero,
ref cds,
SendMessageTimeoutFlags.SMTO_NORMAL,
timeoutMs,
out result);
我们已经确定 process01 正在发送到正确的句柄。有时消息到达 process02,有时没有到达。
// SomeForm.cs
protected override void WndProc(ref Message m) {
// Sometimes the message arrives here
Console.WriteLine(m); // 0x3072a
}
当消息没有到达process02时,process01中没有错误消息。它只是默默地失败了。
这可能是什么原因造成的?我们如何进一步解决这个问题?我们使用 Spy++ 来搜索和收听接收句柄的消息。 Spy++ 总是通过它的句柄找到进程。当消息没有出现在SomeForm.WndProc 中时,它也不会出现在 Spy++ 消息中。
【问题讨论】:
-
您正在使用旨在失败的功能。如果您不检查它的返回值,那么您将无法发现它确实如此。 timeoutMs 值必须足够健壮,以处理由于空闲 RAM 不足的繁忙机器导致的长时间停顿,请不要强迫我们猜测。
-
您可以让进程 2 将消息传回进程 1 吗?
-
@HansPassant 函数的返回值为
0。
标签: c# windows winforms sendmessage