Использую
bitmap.Save(L"g.png", &png)
для сохранения скриншота. Файл просто не сохраняется (без вывода ошибки).
int getmx(HWND hwnd)
{
int x, x1;
x = GetSystemMetrics(SM_XVIRTUALSCREEN);
x1 = GetSystemMetrics(SM_CXVIRTUALSCREEN);
return x1 - x;
}
int getmy(HWND hwnd)
{
int y, y1;
y = GetSystemMetrics(SM_YVIRTUALSCREEN);
y1 = GetSystemMetrics(SM_CYVIRTUALSCREEN);
return y1 - y;
}
int screenshot(HWND hwnd)
{
int w, h;
w = getmx(hwnd);
h = getmy(hwnd);
HDC hScreen = GetDC(NULL);
HDC hdc = CreateCompatibleDC(hScreen);
HBITMAP hbitmap = CreateCompatibleBitmap(hScreen, w, h);
HGDIOBJ old_obj = SelectObject(hdc, hbitmap);
BOOL bRet = BitBlt(hdc, 0, 0, w, h, hScreen, GetSystemMetrics(SM_XVIRTUALSCREEN),
GetSystemMetrics(SM_YVIRTUALSCREEN), SRCCOPY);
Gdiplus::Bitmap bitmap(hbitmap, NULL);
CLSID clsid;
const GUID png{ 0x557cf406, 0x1a04, 0x11d3, {0x9a, 0x73, 0x00, 0x00, 0xf8, 0x1e, 0xf3, 0x2e} };
bitmap.Save(L"g.png", &png);
ReleaseDC(NULL, hdc);
DeleteObject(hbitmap);
return 0;
}