Windows PrintWindow和Microsoft Edge

Windows PrintWindow和Microsoft Edge,windows,winapi,windows-10,microsoft-edge,Windows,Winapi,Windows 10,Microsoft Edge,Windows 10(build 10166)上的PrintWindow函数有问题。当我们调用PrintWindow()来捕获Microsoft Edge(Project Spartan)浏览器窗口的图像时,会得到一个黑色图像 有人知道原因吗?如何修复/避免?或者可以用其他方式捕捉窗口的图像,可以在背景中隐藏在另一个窗口后面 更新:我们尝试发送WM_PRINTCLIENT和WM_PRINT消息,并使用WM_PRINT调用DefWindowProc,但结果相同-只是一个黑色图像。我们还尝试使用Bi

Windows 10(build 10166)上的PrintWindow函数有问题。当我们调用PrintWindow()来捕获Microsoft Edge(Project Spartan)浏览器窗口的图像时,会得到一个黑色图像

有人知道原因吗?如何修复/避免?或者可以用其他方式捕捉窗口的图像,可以在背景中隐藏在另一个窗口后面


更新:我们尝试发送WM_PRINTCLIENT和WM_PRINT消息,并使用WM_PRINT调用DefWindowProc,但结果相同-只是一个黑色图像。我们还尝试使用BitBlt将窗口的DC复制到内存表面,但它也不起作用。我们现在拥有的最佳解决方案是将浏览器窗口置于前台,捕获整个屏幕并将屏幕截图裁剪到窗口的客户端大小;但是,由于切换当前正在使用的应用程序,它可能会中断并打扰用户。

如果您想在浏览器上拍摄页面的屏幕截图。尝试以下JavaScript库: 脚本将遍历加载它的页面的DOM。它收集所有元素的信息,然后使用这些信息构建页面的表示。换句话说,它实际上并不获取页面的屏幕截图,而是基于从DOM读取的属性构建页面的表示


我刚刚在我的机器上试用了微软的Edge和Chrome,两款都用过。希望能奏效

如果您想在浏览器上拍摄页面的屏幕截图。尝试以下JavaScript库: 脚本将遍历加载它的页面的DOM。它收集所有元素的信息,然后使用这些信息构建页面的表示。换句话说,它实际上并不获取页面的屏幕截图,而是基于从DOM读取的属性构建页面的表示


我刚刚在我的机器上试用了微软的Edge和Chrome,两款都用过。希望能奏效

我对IE也有同样的问题 . 最稳定的结果是双重调用

PrintWindow(hWnd, hdcScreen, 0);
PrintWindow(hWnd, hdcScreen, PW_CLIENTONLY);

我也有同样的问题 . 最稳定的结果是双重调用

PrintWindow(hWnd, hdcScreen, 0);
PrintWindow(hWnd, hdcScreen, PW_CLIENTONLY);

这很可能是根本不可能的,在其他一些情况下,当PrintWindow无法工作时,
WM_PRINTCLIENT
必须得到相关窗口的支持(尽管有相反的传言,Windows不会介入并对内存位图执行
WM_PAINT
作为最后手段)@JonathanPotter,感谢您的评论,我试过发送WM_PRINTCLIENT和WM_PRINT消息,并用WM_PRINT调用DefWindowProc,但结果是一样的——只是一个黑色图像。@Andrey这不是Jonathan的意思,你不能调用DefWindowProc,除非你将代码注入到进程中。你不能合成WM_绘画信息。正如我所说的,可能不可能做你想做的事情。这很可能是不可能的。在其他一些情况下,当PrintWindow无法工作时,相关窗口必须支持
WM\u PRINTCLIENT
(尽管有相反的传言,Windows不会介入,并作为最后的手段对内存位图执行
WM\u PAINT
)@JonathanPotter,谢谢你的评论,我尝试过发送WM_PRINTCLIENT和WM_PRINT消息,并用WM_PRINT调用DefWindowProc,但结果是一样的——只是一个黑色图像。@Andrey这不是Jonathan的意思,你不能调用DefWindowProc,除非你已经将代码注入到进程中。你不能合成WM_绘画信息。正如我所说,可能不可能做你想做的事。