Windowsで実行されているスクリーンセーバープログラムをコーディングしています。
プレビューモードでは、Windowsは次のようにプログラムを呼び出します。
Screensaver.exe /p ParentWindowHandle
ただし、プログラムでこの呼び出しを行うと、
BOOL res = GetClientRect(parentWindowHandle, rect)
resはFALSE、rectはNULLになり、次のようになりますERROR_INVALID_WINDOW_HANDLE
。GetLastError()
GetWindowRect
同じ結果が得られます。
しかし、代わりにを呼び出すとBOOL res = IsWindow(parentWindowHandle)
、res==TRUEになります。これは、有効なウィンドウハンドルがあるという意味ではありませんか?
コードは次のようになります:
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow)
{
unsigned int handle = GetHandleFromCommandLine(pCmdLine); // Custom function (tested and approved :) )
HWND parentWindowHandle = (HWND) handle;
LPRECT rect = NULL;
BOOL res = GetClientRect(parentWindowHandle, rect);
// here, rect == NULL, res == FALSE and GetLastError() returns ERROR_INVALID_WINDOW_HANDLE
// ...
// ...
}