当前位置:  开发笔记 > 编程语言 > 正文

为什么GetWindowRgn在Vista上失败?

如何解决《为什么GetWindowRgn在Vista上失败?》经验,为你挑选了1个好方法。

我正在编写一个程序,用于SetWindowRgn在属于另一个进程的窗口中创建透明孔.(仅当用户明确请求时才会这样做.)

程序必须假设目标窗口可能已经有需要保留的漏洞,因此在调用之前SetWindowRgn,它会调用GetWindowRgn获取当前区域,然后将当前区域与新区域组合并调用SetWindowRgn:

HRGN rgnOld = CreateRectRgn ( 0, 0, 0, 0 );
int regionType = GetWindowRgn ( hwnd, rgnOld ); 

这在XP中运行良好,但GetWindowRgn在Vista中调用失败.我试过关掉航空和提升我的线程的特权SE_DEBUG_NAMEAdjustTokenPrivileges,但也有帮助.

GetLastError()似乎没有返回GetWindowRgn的有效值 - 它在一台机器上返回0,在另一台机器上返回5(拒绝访问).

谁能告诉我我做错了什么或建议采用不同的方法?



1> Shog9..:

你确定你的窗户一个区域吗?XP中的大多数顶级窗口都是这样做的,因为默认主题将它们用于圆角...但这仍然是一个不好的假设,并且一旦你到达Vista可能很难保持.

如果你还没有设置一个区域,并且调用失败,请使用合理的默认值(窗口rect)并且不要让它破坏你的生活.现在,如果SetWindowRgn()失败......

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有