远程窗口不接收消息

时间:2016-06-12 08:43:15

标签: windows winapi visual-c++ sendmessage

我尝试使用相同的代码(程序C)对其他程序(A和B)中的TreeView调用TreeView_GetRoot(TVM_GETNEXTITEM消息)来操作它们。

程序A可以接收消息(我可以看到来自spy ++的消息)。

但是对于程序B,似乎它无法接收消息,返回值是“未定义”'从VC调试窗口,同时没有消息显示在spy ++中。 (Spy ++正确显示消息,手动点击TreeView)

两个程序和间谍++都是32位。

此外,Winspector(如spy ++)可以在程序A中显示TreeView的项目计数,但不能在程序B中显示。我怀疑它是由同样的原因引起的。

你知道它可能是什么样的吗?

1 个答案:

答案 0 :(得分:2)

SendMessage备注的文档,发送的邮件受UIPI约束(参见Windows Integrity Mechanism Design):

  

邮件发送受UIPI约束。进程的线程只能将消息发送到完整性级别较低或相等的进程中的线程的消息队列。

文档还说明了如何报告因UIPI违规而导致的错误:

  

当UIPI阻止邮件时,使用GetLastError检索的最后一个错误设置为5(访问被拒绝)。

以下列出了可能的解决方案:

  • 使用UI Automation。在某些情况下,UI自动化程序可以绕过UIPI限制。
  • 以更高的完整性级别运行控制应用程序。这不是推荐的,应该被视为最后的手段。