Не валиден дескриптор окна

Всем привет, вот мой код:

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(не валиден дескриптор окна)


Ответы (0 шт):