Я пытаюсь заставить хром рисовать на холсте, используя PrintWindow
. Вот код, который я использую для рендеринга захвата рабочего стола
PRECT lpRect;
GetWindowRect(g_Window, lpRect);
HDC hDeviceContext =
CreateCompatibleDC(g_DeviceContextMain);
HBITMAP hBitmapWindow =
CreateCompatibleBitmap(g_DeviceContextMain, lpRect->right - lpRect->left, lpRect->bottom - lpRect->top);
SelectObject(hDeviceContext, hBitmapWindow);
if (PrintWindow(g_Window, hDeviceContext, g_IsAtleast81 ? 0x00000002 : NULL)) {
BitBlt(g_DeviceContextClient,
lpRect->left, lpRect->top, lpRect->right - lpRect->left, lpRect->bottom - lpRect->top, hDeviceContext, NULL, NULL, SRCCOPY);
}
DeleteObject(hBitmapWindow);
DeleteDC(hDeviceContext);
Вот вывод при открытии Chrome и захвате экрана (Windows 7)
Я могу исправить это в Windows 10, добавив флаг PW_RENDERFULLCONTENT
к PrintWindow
, но, к сожалению, этот флаг доступен только в Windows 8.1 и выше. Мне нужно, чтобы это работало в Windows 7/8.
Я также пытался отключить аппаратное ускорение в Chrome до захвата экрана. Результат был все тот же!
Можно ли как-нибудь исправить эту проблему, чтобы главное окно отображалось без черного прямоугольника? Или скопируйте то, что PW_RENDERFULLCONTENT
делает с Windows> = 8.1 в Windows <8? </p>