Я пишу программу, которая использует SetWindowRgn
для создания прозрачных отверстий в окне, которое принадлежит другому процессу. (Это делается только тогда, когда пользователь явно запрашивает это.)
Программа должна предположить, что в целевом окне уже могут быть дыры, которые необходимо сохранить, поэтому перед вызовом SetWindowRgn
она вызывает GetWindowRgn
, чтобы получить текущую область, а затем объединяет текущий регион с новым и звонками SetWindowRgn
:
HRGN rgnOld = CreateRectRgn ( 0, 0, 0, 0 );
int regionType = GetWindowRgn ( hwnd, rgnOld );
Это нормально работает в XP, но вызов GetWindowRgn
не удается в Vista. Я попытался отключить Aero и повысить привилегию своего потока до SE_DEBUG_NAME
с помощью AdjustTokenPrivileges
, но ни один из них не помогает.
GetLastError (), по-видимому, не возвращает действительное значение для GetWindowRgn - он возвращает 0 на одной машине и 5 (доступ запрещен) на другой.
Может кто-нибудь сказать мне, что я делаю неправильно или предложить другой подход?