gpt4 book ai didi

c - PrintWindow() 无法打印 Google Chrome 窗口 (Chrome_WidgetWin_1)

转载 作者:可可西里 更新时间:2023-11-01 13:50:24 30 4
gpt4 key购买 nike

我使用的是 Microsoft Visual Studio 2010 和 Windows 7 Professional。这是我将窗口图像复制到剪贴板的代码:

void PrintWindowEx( HWND hWnd )
{
HDC hDCMem = CreateCompatibleDC(NULL);
RECT rect;

GetWindowRect(hWnd, &rect);

HBITMAP hBmp = NULL;

HDC hDC = GetDC(hWnd);

hBmp = CreateCompatibleBitmap(hDC, rect.right - rect.left, rect.bottom - rect.top);

HGDIOBJ hOld = SelectObject(hDCMem, hBmp);
PrintWindow(hWnd, hDCMem, 0);

SelectObject(hDCMem, hOld);
DeleteObject(hDCMem);

OpenClipboard(hWnd);

EmptyClipboard();
SetClipboardData(CF_BITMAP, hBmp);
CloseClipboard();

ReleaseDC(hWnd, hDC);
}

它适用于除 Google Chrome 主窗口之外的所有窗口。我认为是因为 Chrome 使用直接渲染,所以我在 chrome://settings 中禁用了硬件加速。仍然不起作用。然后我意识到由于 Chrome 沙盒中的限制,处理消息可能会受到限制,所以我使用 --no-sandbox 命令行选项启动了 Chrome。还是不行。

我怎样才能让它发挥作用?适用于 Chrome 和任何其他窗口,如 Chrome。 BitBlt() 是 Not Acceptable ,因为 window 窗口的某些部分可能与另一个窗口重叠,窗口可以在其他桌面上,等等。是否有任何可行的解决方案?也许将 DLL 加载到另一个进程或类似的东西。

UPD:它在 RedrawWindow() 之后重绘;所以我可以截图(一些部分 - 左边部分(宽度~20px)和右边部分不被复制)。那么,它是否支持 WM_PRINT 呢?如何截取窗口的完整屏幕截图?

最佳答案

我被困在这个问题上好久了,然后发现我可以将 PW_RENDERFULLCONTENT 参数作为最后一个参数传递给 PrintWindow。谷歌搜索显示它是 Windows 8.1 中的新功能,因此可能不适用于 7。不过可能值得一试,Winuser.h 将其定义为

#if(_WIN32_WINNT >= 0x0603)
#define PW_RENDERFULLCONTENT 0x00000002
#endif /* _WIN32_WINNT >= 0x0603 */

关于c - PrintWindow() 无法打印 Google Chrome 窗口 (Chrome_WidgetWin_1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30965343/

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