首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问外部窗口句柄

访问外部窗口句柄
EN

Stack Overflow用户
提问于 2009-10-09 08:59:27
回答 1查看 1.2K关注 0票数 2

我对目前正在处理的程序有问题。这是由于vista/Windows7中增加的安全性造成的,特别是UIPI,它阻止具有较低完整性级别的窗口与较高完整性级别的窗口“对话”。

在我的例子中,我想告诉高完整性级别的窗口移动到我们的应用程序中,它在XP或Windows7上完美地工作,同时关闭了安全性。

我已经尝试过直接设置更高IL窗口的HWND,而不是使用findwindow()函数,这工作得很好,但当试图移动它或通常与它交互时,程序会失败。windowhandle由应用程序保存,以供在较低IL下运行的应用程序嵌入和读取。

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

对如何解决这个问题有什么想法吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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应用程序中注册了该方法,代码行看起来有点像这样:

代码语言:javascript
复制
const UINT MY_MOVEINTWINDOW_MSG = RegisterWindowMessage(_T("MyMsg.MoveWindow"));

然后,lowIL.exe能够将这些消息发送到highIL.exe窗口,而不会被阻止。然后,只需简单地添加和编写消息处理程序。

只有当您同时具有高IL和低IL的访问权限时,此方法才有效。MSDN在Website上也有一个ChangeWindowMessageFilterEx函数的工作示例

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1542675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档