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

时间:2019-05-30 23:43:22

标签: winapi windows-10 activex gdi bitblt

我正在使用BitBlt winapi函数来获取给定窗口的屏幕截图,即使窗口部分重叠也是如此。
我已经一切正常,除了在Windows 10上,对于某些窗口(例如Edge浏览器),屏幕截图完全变成了黑色。

在将这些问题归因于在这些窗口上使用硬件加速的图形上下文时,还有许多其他问题。

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

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

如果能够检测到该错误,则可以选择用于正确捕获屏幕截图的库(GDI,ActiveX或其他)。

否则,我能检测到此问题的唯一方法是逐像素扫描屏幕快照以检查其是否为全黑。然后使用另一种捕获方法,直到在屏幕截图上得到一些内容为止。
但这听起来是一个糟糕的解决方案。

1 个答案:

答案 0 :(得分:0)

  

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

您可以使用DwmRegisterThumbnail  捕获隐藏/重叠的窗口,特别是UWP(例如Edge,Calc等)

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