Но поток->Чтение() не работает. Функция Once_read всегда 0, и в buf нет данных.
Я не знаю, есть ли лучшие способы сделать это.
Код: Выделить всё
HDC hdc = NULL;
if (hWnd == NULL) { hWnd = GetDesktopWindow(); }
hdc = GetDC(hWnd);
if (hdc == NULL) { return false; }
int bitOfpix = GetDeviceCaps(hdc, BITSPIXEL);
int width = GetDeviceCaps(hdc, HORZRES);
int height = GetDeviceCaps(hdc, VERTRES);
CImage image;
IStream* stream;
CreateStreamOnHGlobal(0, true, &stream);
image.Create(width, height, bitOfpix);
// PrintWindow(hWnd, image.GetDC(), PW_CLIENTONLY | PW_RENDERFULLCONTENT);
BitBlt(image.GetDC(), 0, 0, width, height, hdc, 0, 0, SRCCOPY);
image.Save(stream, Gdiplus::ImageFormatBMP);
image.Save(name.data());
STATSTG stat;
stream->Stat(&stat, STATFLAG_NONAME);
ULONGLONG size = stat.cbSize.QuadPart;
char* buf = new char[4096];
memset(buf, 0, 4096);
int once_read = 0;
while (size > 0)
{
HRESULT res = stream->Read(buf, min(size, 4095), (ULONG *)&once_read);
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78495308/c-and-istream-read[/url]