gpt4 book ai didi

winapi - 为什么 GetWindowRgn 在 Vista 上失败?

转载 作者:行者123 更新时间:2023-12-01 15:45:20 42 4
gpt4 key购买 nike

我正在编写一个使用 SetWindowRgn 的程序在属于另一个进程的窗口中制作透明孔。 (只有当用户明确请求时才会这样做。)

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

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

这在 XP 中工作正常,但对 GetWindowRgn 的调用在 Vista 中失败。我已经尝试关闭 Aero 并使用 AdjustTokenPrivileges 将线程的权限提升到 SE_DEBUG_NAME , 但都没有帮助。

GetLastError() 似乎没有为 GetWindowRgn 返回有效值——它在一台机器上返回 0,在另一台机器上返回 5(访问被拒绝)。

任何人都可以告诉我我做错了什么或建议不同的方法吗?

最佳答案

您确定您的窗口一个区域吗? XP 中的大多数顶级窗口都这样做,只是因为默认主题将它们用于圆角......但这仍然是一个错误的假设,并且一旦你进入 Vista 就很可能不成立。

如果您尚未设置区域,并且调用失败,请使用合理的默认值(窗口矩形),不要让它毁了您的生活。现在,如果 SetWindowRgn() 失败...

关于winapi - 为什么 GetWindowRgn 在 Vista 上失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/144774/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com