Не валиден дескриптор окна
Всем привет, вот мой код:
static DWORD WINAPI InputThread(LPVOID param)
{
SetThreadDesktop(g_hDesk);
HWND hWnd = GetDesktopWindow();
std::cout << hWnd << std::endl;
Sleep(10000);
RECT rc;
GetClientRect(hWnd, &rc);
int cx = rc.right - rc.left;
int cy = rc.bottom - rc.top;
if (!g_pImageBits || (g_sImageInfo.biWidth != cx) || (g_sImageInfo.biHeight != cy))
{
if (g_pImageBits)
free(g_pImageBits);
int line = cx * 4;
int size = cy * line;
g_pImageBits = (char*)malloc(size);
g_sImageInfo.biSize = sizeof(g_sImageInfo);
g_sImageInfo.biWidth = cx;
g_sImageInfo.biHeight = cy;
g_sImageInfo.biPlanes = 1;
g_sImageInfo.biBitCount = 32;
g_sImageInfo.biCompression = BI_RGB;
g_sImageInfo.biSizeImage = size;
}
HDC hDc = GetDC(NULL);
HDC hMemDc = CreateCompatibleDC(hDc);
HBITMAP hMemBitmap = CreateCompatibleBitmap(hDc, cx, cy);
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDc, hMemBitmap);
std::cout << BitBlt(hMemDc, 0, 0, cx, cy, hDc, rc.left, rc.top, SRCCOPY) << std::endl;
std::cout << GetLastError() << std::endl;
SelectObject(hMemDc, hOldBitmap);
GetDIBits(hDc, hMemBitmap, 0, cy, g_pImageBits, (BITMAPINFO*)&g_sImageInfo, DIB_RGB_COLORS);
DeleteObject(hMemBitmap);
DeleteDC(hMemDc);
ReleaseDC(hWnd, hDc);
return 1;
}
void GetMyImage()
{
HWND hWnd = GetDesktopWindow();
std::cout << hWnd << std::endl;
g_hDesk = OpenDesktopA("123", 0, TRUE, GENERIC_ALL);
if (!g_hDesk)
g_hDesk = CreateDesktopA("123", NULL, NULL, 0, GENERIC_ALL, NULL);
SetThreadDesktop(g_hDesk);
CreateThread(NULL, 0, InputThread, NULL, 0, 0);
}
BitBlt возвращает 0, возвращает код ошибки - 6(не валиден дескриптор окна)