我正在编写一个程序,用于SetWindowRgn在属于另一个进程的窗口中创建透明孔.(仅当用户明确请求时才会这样做.)
程序必须假设目标窗口可能已经有需要保留的漏洞,因此在调用之前SetWindowRgn,它会调用GetWindowRgn获取当前区域,然后将当前区域与新区域组合并调用SetWindowRgn:
HRGN rgnOld = CreateRectRgn ( 0, 0, 0, 0 );
int regionType = GetWindowRgn ( hwnd, rgnOld );
Run Code Online (Sandbox Code Playgroud)
这在XP中运行良好,但GetWindowRgn在Vista中调用失败.我试过关掉航空和提升我的线程的特权SE_DEBUG_NAME与AdjustTokenPrivileges,但也有帮助.
GetLastError()似乎没有返回GetWindowRgn的有效值 - 它在一台机器上返回0,在另一台机器上返回5(拒绝访问).
谁能告诉我我做错了什么或建议采用不同的方法?