我正在尝试使用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中禁用硬件加速。结果还是一样!
有什么办法可以解决此问题,例如在绘制主窗口时没有黑色矩形?还是在Windows <8中复制PW_RENDERFULLCONTENT
在Windows> = 8.1中的作用?
答案 0 :(得分:0)
您可能无法使用PrintWindow打印镶边窗口,但可以使用BitBlt。该功能只会获取屏幕的一部分,因此与PrintScreen不同,您无法获取最小化窗口的位图。
以及它如何在webrtc中实现: https://cs.chromium.org/chromium/src/third_party/webrtc/modules/desktop_capture/window_capturer_win.cc