Рендеринг хрома с PrintWindow - PullRequest
0 голосов
/ 01 июля 2018

Я пытаюсь заставить хром рисовать на холсте, используя 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)

1

Я могу исправить это в Windows 10, добавив флаг PW_RENDERFULLCONTENT к PrintWindow, но, к сожалению, этот флаг доступен только в Windows 8.1 и выше. Мне нужно, чтобы это работало в Windows 7/8.

Я также пытался отключить аппаратное ускорение в Chrome до захвата экрана. Результат был все тот же!

Можно ли как-нибудь исправить эту проблему, чтобы главное окно отображалось без черного прямоугольника? Или скопируйте то, что PW_RENDERFULLCONTENT делает с Windows> = 8.1 в Windows <8? </p>

1 Ответ

0 голосов
/ 01 июля 2018

Возможно, вы не можете распечатать окно Chrome с помощью PrintWindow, но вы можете использовать BitBlt . Функция будет получать только части экрана, поэтому вы не можете получить растровое изображение свернутого окна, в отличие от PrintScreen.

Документы BitBlt

и как это было реализовано в webrtc: https://cs.chromium.org/chromium/src/third_party/webrtc/modules/desktop_capture/window_capturer_win.cc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...