发送到正确的句柄时,SendMessageTimeout有时会无声地失败

时间:2018-06-01 17:45:54

标签: c# windows winforms sendmessage

我们正在从一个进程(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 ++消息中。

1 个答案:

答案 0 :(得分:0)

问题是权限提升:

  • 发送会话没有提升,
  • 接收会话被提升(即以管理员身份运行)。