получить скриншот / захват окна

У меня есть удаленное приложение, которое снимок экрана, используя «дескриптор окна». ( Я имею в виду HDC, HBITMAP….).

Код выглядит так:

int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
HDC hDesktopDC = CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL);
HDC hCaptureDC = CreateCompatibleDC(hDesktopDC);

HBITMAP hCaptureBitmap =CreateCompatibleBitmap(
hDesktopDC,
nScreenWidth,
nScreenHeight);

SelectObject(hCaptureDC,hCaptureBitmap);

BitBlt(
hCaptureDC,
0,0,
nScreenWidth,nScreenHeight,
hDesktopDC,
0,0,
SRCCOPY);

BITMAPINFOHEADER   info;

info.biSize = sizeof(BITMAPINFOHEADER);
info.biWidth = nScreenWidth;
info.biHeight = nScreenHeight;
info.biPlanes = 1;
info.biBitCount = 32;
info.biCompression = BI_RGB;
info.biSizeImage = 0;
info.biXPelsPerMeter = 0;
info.biYPelsPerMeter = 0;
info.biClrUsed = 0;
info.biClrImportant = 0;

//reteive the image data
byte *bits= (byte*)malloc(nScreenWidth*nScreenHeight*4);
GetDIBits(hDesktopDC,   // handle to DC
hCaptureBitmap,     // handle to bitmap
0,                  // first scan line to set
nScreenHeight,      // number of scan lines to copy
bits,               // array for bitmap bits
(BITMAPINFO*)&info, // bitmap data buffer
DIB_RGB_COLORS      // RGB
);

DeleteDC(hDesktopDC);
DeleteDC(hCaptureDC);
DeleteObject(hCaptureBitmap);

После многих кругов (около 2000) CreateDC() возврат функции NULL, И, если я устаревший DC (то есть инициализирую его один раз, а затем уничтожаю при выходе из приложения), мой щелчок окна приложения (или его часть) или даже становится полностью невидимым.

Таким образом, мне нужно знать, как разобраться в этой проблеме, или узнать какой-нибудь другой лучший способ получить изображение на экране (бит / RGB-данные).

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector