gpt4 book ai didi

c - 使用 PrintWindow 渲染 chrome

转载 作者:太空宇宙 更新时间:2023-11-04 04:16:47 24 4
gpt4 key购买 nike

我正在尝试使用 PrintWindow 让 chrome 在我的 Canvas 上绘画。这是我用来呈现桌面捕获的代码

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 中的硬件加速。结果还是一样!

有什么办法可以解决这个问题,使主窗口的绘制不带黑色矩形?或者在 Windows < 8 中复制 PW_RENDERFULLCONTENT 对 Windows >= 8.1 的作用?

最佳答案

您可能无法使用 PrintWindow 打印 chrome 窗口,但您可以使用 BitBlt .与 PrintScreen 不同,该函数只会获取屏幕的一部分,因此您无法获取最小化窗口的位图。

BitBlt Docs

以及它是如何在 webrtc 中实现的: https://cs.chromium.org/chromium/src/third_party/webrtc/modules/desktop_capture/window_capturer_win.cc

关于c - 使用 PrintWindow 渲染 chrome,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51119033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com