我对目前正在处理的程序有问题。这是由于vista/Windows7中增加的安全性造成的,特别是UIPI,它阻止具有较低完整性级别的窗口与较高完整性级别的窗口“对话”。
在我的例子中,我想告诉高完整性级别的窗口移动到我们的应用程序中,它在XP或Windows7上完美地工作,同时关闭了安全性。
我已经尝试过直接设置更高IL窗口的HWND,而不是使用findwindow()函数,这工作得很好,但当试图移动它或通常与它交互时,程序会失败。windowhandle由应用程序保存,以供在较低IL下运行的应用程序嵌入和读取。
我还尝试将清单中的UIaccess设置为TRUE,并对程序进行数字签名,但没有成功。
对如何解决这个问题有什么想法吗?谢谢。
发布于 2009-10-14 07:47:54
我想我会为那些同样挣扎的人跟进这一点,因为我终于找到了一种方法。
IL =完整性级别。
我有两个应用程序,highIL.exe和lowIL.exe,highIL想要找到lowIL.exe窗口,将其设置为子窗口,并将其移动到highIL.exe上为其创建的区域中。这被vista+中的UIPI阻止了。
最后,我使用了vista中的ChangeWindowMessageFilter方法和Windows7中的ChangeWindowMessageFilterEx,这两个方法都可以在user32.dll中找到。这些函数允许您在UIPI上戳一个洞,以允许您想要通过的消息。
我使用RegisterWindowMessage函数创建了一些自定义消息,我使用此函数在highIL和lowIL应用程序中注册了该方法,代码行看起来有点像这样:
const UINT MY_MOVEINTWINDOW_MSG = RegisterWindowMessage(_T("MyMsg.MoveWindow"));然后,lowIL.exe能够将这些消息发送到highIL.exe窗口,而不会被阻止。然后,只需简单地添加和编写消息处理程序。
只有当您同时具有高IL和低IL的访问权限时,此方法才有效。MSDN在Website上也有一个ChangeWindowMessageFilterEx函数的工作示例
https://stackoverflow.com/questions/1542675
复制相似问题