我正在使用 BitBlt
winapi 函数来截取给定窗口的屏幕截图,即使该窗口部分重叠。
我已经一切正常,除了在 Windows 10 上,对于某些窗口(如 Edge 浏览器),屏幕截图完全是黑色的。
许多其他问题都同意将此问题归因于在这些窗口上使用硬件加速图形上下文。
- BitBlt screen capture not working on Windows 10
- Screenshot with BitBlt results in black image on Windows 10
- Screenshot captured using BitBlt in C# results a black image on Windows 10
- BitBlt not capturing windows in Hardware accelerated mode
- AutoHotkey-GDIp: Capture a screenshot from a hardware accelerated window
显然 GDI 库与这种图形上下文不兼容,因此必须使用不同的库。
我的问题具体是关于如何检测窗口是否使用与 GDI 库不兼容的图形上下文。
如果我能够检测到这一点,那么我可以选择使用哪个库来正确捕获屏幕截图(GDI、ActiveX 或其他)。
否则,我检测到这一点的唯一方法是逐像素扫描屏幕截图以检查其是否完全黑色。然后使用不同的捕获方法,直到我在屏幕截图上获得一些内容。
但这听起来是一个糟糕的解决方案。
最佳答案
I have everything working fine already, except that, on Windows 10, for some windows (like the Edge browser) the screenshot turns out completely black.
您可以使用DwmRegisterThumbnail 捕获隐藏/重叠的窗口,特别是 UWP(如 Edge、Calc 等)
我在 Windows 10 上使用它没有问题(+ D3D 保存位图)
关于winapi - 检测窗口是否正在使用硬件加速图形上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56386968/