SetWindowRgn
別のプロセスに属するウィンドウに透明な穴をあけるプログラムを書いています。(これは、ユーザーが明示的に要求した場合にのみ実行されます。)
プログラムは、ターゲット ウィンドウに保持する必要のある穴が既にある可能性があると想定する必要があるため、 を呼び出す前に を呼び出しSetWindowRgn
てGetWindowRgn
現在の領域を取得し、現在の領域と新しい領域を結合して を呼び出しますSetWindowRgn
。
HRGN rgnOld = CreateRectRgn ( 0, 0, 0, 0 );
int regionType = GetWindowRgn ( hwnd, rgnOld );
これは XP では問題なく動作しGetWindowRgn
ますが、Vista では への呼び出しが失敗します。Aero をオフにして、スレッドの権限をSE_DEBUG_NAME
withAdjustTokenPrivileges
に昇格させようとしましたが、どちらも役に立ちません。
GetLastError() は、GetWindowRgn に対して有効な値を返さないようです。あるマシンでは 0 を返し、別のマシンでは 5 (アクセスが拒否されました) を返します。
誰かが私が間違っていることを教えてくれますか、または別のアプローチを提案できますか?