具体截图window(HWND,HW加速)

Screenshot of the specific window (HWND, HW accelerated)

我需要捕获使用硬件加速的特定 window (HWND) 的 snapshots/screenshots,并将它们记录到视频流中。

在使用 BitBltPrintWindow 时,只有当 window 没有硬件加速时我才能捕获图像数据,否则我会得到黑色纹理。

尝试使用 User32.dll 的未记录的 DwmGetDxSharedSurface 来获取 DirectX 表面句柄。但它因错误而失败:

ERROR_GRAPHICS_PRESENT_REDIRECTION_DISABLED - desktop windowing management subsystem is off

(Edit: Fails for certain applications, i.e. "calculator.exe")

尝试使用 Dwmapi.dll 的未记录函数 DwmpDxUpdateWindowSharedSurfaceDwmpDxGetWindowSharedSurface。我设法检索到了看起来像有效 DirectX 表面句柄的内容。 (它的 d3dFormat,宽度和高度信息有效)Dx 的 OpenSharedResource 没有抱怨并设法创建了一个有效的 ID3D11Texture2D。问题是..所有字节都是零(得到黑色纹理)。我可能在这里做错了什么或者..未记录的 DWM 功能在 Windows 10...

上不再起作用

Edit: I'm able to get image data for some applications like Windows explorer, Paint, etc, but for some like i.e. Slack i get all zeros/black image.

编辑:当捕捉 VLC 时,我得到这个:

问题: 有没有其他方法可以抓取硬件加速的图像数据window?

注意:我不想截取整个桌面

您可以在 nFlags=2 的情况下使用 PrintWindow 或使用放大 API(排除 windows) 或者尝试破解 dwm.exe.