我需要捕获使用硬件加速的特定窗口(HWND)的快照/屏幕快照,并将它们记录到视频流中。
使用CONVERT
或FLOAT
时,仅当此窗口没有硬件加速时,我才能捕获图像数据,否则我会得到黑色纹理。
尝试使用 User32.dll 的未公开文档BitBlt
获取DirectX表面句柄。但是失败并显示错误:
ERROR_GRAPHICS_PRESENT_REDIRECTION_DISABLED-桌面窗口 管理子系统已关闭
(编辑:对于某些应用程序,即“ calculator.exe”失败)
尝试使用 Dwmapi.dll 的未记录功能PrintWindow
和DwmGetDxSharedSurface
。我设法检索了看起来像有效的DirectX表面手柄的东西。 (它的d3dFormat,宽度和高度信息有效)Dx的DwmpDxUpdateWindowSharedSurface
没有抱怨,并设法创建了一个有效的DwmpDxGetWindowSharedSurface
。问题是..所有字节都是零(得到黑色纹理)。我可能在这里做错了,或者..未记录的DWM功能在Windows 10上不再起作用...
编辑:我能够获取某些应用程序(例如Windows)的图像数据 资源管理器,Paint等,但是对于某些东西(例如,松弛) 零/黑色图像。
问题: 还有其他方法可以捕获硬件加速窗口的图像数据吗?
注意:我不想捕获整个桌面。
答案 0 :(得分:1)
您可以将PrintWindow与nFlags = 2一起使用 或使用放大API(不包括Windows) 或尝试破解dwm.exe。