我正在编写一个程序,用于SetWindowRgn
在属于另一个进程的窗口中制作透明孔。(只有在用户明确请求时才会这样做。)
程序必须假设目标窗口可能已经有洞需要保留,所以在它调用之前SetWindowRgn
,它调用GetWindowRgn
以获取当前区域,然后将当前区域与新区域组合并调用SetWindowRgn
:
HRGN rgnOld = CreateRectRgn ( 0, 0, 0, 0 );
int regionType = GetWindowRgn ( hwnd, rgnOld );
这在 XP 中运行良好,但在 Vista 中调用GetWindowRgn
失败。我尝试关闭 Aero 并将线程的权限提升到SE_DEBUG_NAME
with AdjustTokenPrivileges
,但都没有帮助。
GetLastError() 似乎没有为 GetWindowRgn 返回有效值——它在一台机器上返回 0,在另一台机器上返回 5(拒绝访问)。
谁能告诉我我做错了什么或提出不同的方法?