C++ 访问外部窗口句柄

C++ 访问外部窗口句柄,c++,windows-7,windows-vista,uipi,C++,Windows 7,Windows Vista,Uipi,我对目前正在进行的程序有问题。这是由于vista/Windows 7中的安全性增强,特别是UIPI,它阻止完整性级别较低的窗口与较高的窗口“对话” 在我的例子中,我想告诉具有高完整性级别的窗口进入我们的应用程序,它在XP或Windows7上完美地工作,安全性关闭 我曾尝试直接设置higher IL窗口的HWND,而不是使用findwindow()函数,这可以很好地工作,但程序在尝试移动它或通常与它交互时失败。windowhandle由应用程序保存以嵌入,并由以较低IL运行的应用程序读取 我还尝试

我对目前正在进行的程序有问题。这是由于vista/Windows 7中的安全性增强,特别是UIPI,它阻止完整性级别较低的窗口与较高的窗口“对话”

在我的例子中,我想告诉具有高完整性级别的窗口进入我们的应用程序,它在XP或Windows7上完美地工作,安全性关闭

我曾尝试直接设置higher IL窗口的HWND,而不是使用findwindow()函数,这可以很好地工作,但程序在尝试移动它或通常与它交互时失败。windowhandle由应用程序保存以嵌入,并由以较低IL运行的应用程序读取

我还尝试将清单中的UIaccess设置为TRUE,并对程序进行数字签名,但没有成功

有什么办法解决这个问题吗?
谢谢。

我想我会为那些同样挣扎的人跟进,因为我终于找到了一种方法

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上还有一个ChangeWindowMessageFilterEx函数的工作示例