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

标签 winapi windows-10 activex gdi bitblt

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

许多其他问题都同意将此问题归因于在这些窗口上使用硬件加速图形上下文。

显然 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/

相关文章:

multithreading - 一次调用ResetEvent是否会重置所有线程或仅调用线程的信号事件? (WINAPI)

c++ - 0xC0000005 : Access violation after calling CopyMemory()

Windows 批处理 : findstr not setting ERRORLEVEL within a for loop

javascript - MIDL 不希望我定义无 HRESULT 的函数!

c++ - recv 函数在使用两次时失败

python - Python 3.4 上的 GetProcAddress 奇怪行为

xaml - 如何将背景颜色应用于 TextBlock 的 TextElements?

command-line - Netsh 命令不更新网络

Windows 10 中的 VB6 无法实现 IDTExtensibility2

javascript - ActiveX 对象错误