Winapi 检测窗口是否使用硬件加速图形上下文

Winapi 检测窗口是否使用硬件加速图形上下文,winapi,windows-10,activex,gdi,bitblt,Winapi,Windows 10,Activex,Gdi,Bitblt,我正在使用BitBltwinapi函数拍摄给定窗口的屏幕截图,即使该窗口部分重叠。 我已经一切正常,除了在Windows10上,对于某些窗口(如Edge浏览器),屏幕截图变成完全黑色 许多其他问题都认为这个问题是由于在这些窗口上使用了硬件加速的图形环境造成的 显然,GDI库与这种图形上下文不兼容,因此必须使用不同的库 我的问题是关于如何检测窗口是否使用了与GDI库不兼容的图形上下文 如果我能够检测到这一点,那么我可以选择使用哪个库来正确捕获屏幕截图(GDI、ActiveX或其他)

我正在使用
BitBlt
winapi函数拍摄给定窗口的屏幕截图,即使该窗口部分重叠。
我已经一切正常,除了在Windows10上,对于某些窗口(如Edge浏览器),屏幕截图变成完全黑色

许多其他问题都认为这个问题是由于在这些窗口上使用了硬件加速的图形环境造成的

显然,GDI库与这种图形上下文不兼容,因此必须使用不同的库

我的问题是关于如何检测窗口是否使用了与GDI库不兼容的图形上下文

如果我能够检测到这一点,那么我可以选择使用哪个库来正确捕获屏幕截图(GDI、ActiveX或其他)

否则,我唯一能检测到这一点的方法就是逐像素扫描屏幕截图,检查它是否完全是黑色的。然后使用不同的捕获方法,直到在屏幕截图上获得一些内容。
但这听起来是个糟糕的解决方案

我已经一切正常了,除了在Windows 10上, 对于某些窗口(如边缘浏览器),屏幕截图显示 全黑

你可以用 捕获隐藏/重叠窗口,特别是UWP(如边缘、计算等)


我在Windows 10上使用它没有问题(+D3D来保存位图)

GetDC(nullptr)
中截取屏幕快照,然后裁剪出目标窗口。@JonathanPotter,不幸的是,这种技术不适用于部分重叠的窗口。在任何情况下,都不能使用BitBlt来捕获重叠的窗口。“对于某些窗口。。。屏幕截图显示为完全黑色”-硬件加速并不是唯一可能发生的原因。在Windows 7+中,应用程序只需在实际显示器之外的任何位置渲染其窗口即可(例如,想想DRM保护)@JonathanPotter,是的,你可以。自从在Windows Vista中引入DWM composition以来,这已经成为可能。我原以为
dwmRegisterThumbnailProperties
可以让你在自己的窗口中显示缩略图,但它不能让你访问像素数据。调用
DwmUpdateThumbnailProperties
,你如何获得图像数据?我测试过使用D3DXSaveSurfaceToFile(VS 2015,Windows 10)