Если я делаю попытку сделать скриншот определенного окна через его HWND и это приложение использует видеопамять, на скринах я получаю черный экран. Если я скриню весь экран и вырезаю только нужно мне область всё ок. Но есть функция Alt + PrtSc которая делает скриншот активного окна, вне зависимости от того использует приложение видеопамять или нет. И вот вопрос, могу ли я делать скриншоты приложений использующие видеопамять без внедрения своей DLL в видеопамять, без обрезания всего рабочего стола получаю размер нужного мне окна через RECT полученный через HWND, а просто через встроенную функцию Windows Alt + PrtSc? И я надеюсь не на комбинацию клавиш через симуляцию нажатий а на метод или может что-то такое... Поделитесь пожалуйста информацией и мыслями по этому поводу.
HBITMAP CreateBMPScreen(Gdiplus::Point ptWin, Gdiplus::Point sizeWin) {
HDC scrdc = GetDC(0); // Это я получаю DC рабочего стола, если поставлю сюда HWND приложения использующего видеопамять, будет чёрный экран на скрине
int Height = GetSystemMetrics(SM_CYSCREEN), Width = GetSystemMetrics(SM_CXSCREEN);
if (hWnd != NULL) {
ShowWindow(hWnd, SW_SHOWNORMAL);
SetForegroundWindow(hWnd);
SetWindowPos(hWnd, NULL, ptWin.X, ptWin.Y, sizeWin.X, sizeWin.Y, SWP_NOSIZE | SWP_NOZORDER);
GetWindowRect(hWnd, &rect);
}
Sleep(250);
SpaceButtonClick();
HDC memdc = CreateCompatibleDC(scrdc);
HBITMAP membit = CreateCompatibleBitmap(scrdc, rect.right + 8, rect.bottom + 31);
SelectObject(memdc, membit);
BitBlt(memdc, 0, 0, rect.right + 8, rect.bottom + 31, scrdc, rect.left, rect.top, SRCCOPY);
HBITMAP hBitmap = (HBITMAP)SelectObject(memdc, membit);
ShowWindow(hWnd, SW_MINIMIZE);
return hBitmap;
}