特定窗口的屏幕截图(HWND,HW加速)

时间:2019-04-26 10:14:39

标签: windows screenshot screen-capture dwm screen-recording

我需要捕获使用硬件加速的特定窗口(HWND)的快照/屏幕快照,并将它们记录到视频流中。

使用CONVERTFLOAT时,仅当此窗口没有硬件加速时,我才能捕获图像数据,否则我会得到黑色纹理。

尝试使用 User32.dll 的未公开文档BitBlt获取DirectX表面句柄。但是失败并显示错误:

  

ERROR_GRAPHICS_PRESENT_REDIRECTION_DISABLED-桌面窗口   管理子系统已关闭

     

(编辑:对于某些应用程序,即“ calculator.exe”失败)

尝试使用 Dwmapi.dll 的未记录功能PrintWindowDwmGetDxSharedSurface。我设法检索了看起来像有效的DirectX表面手柄的东西。 (它的d3dFormat,宽度和高度信息有效)Dx的DwmpDxUpdateWindowSharedSurface没有抱怨,并设法创建了一个有效的DwmpDxGetWindowSharedSurface。问题是..所有字节都是零(得到黑色纹理)。我可能在这里做错了,或者..未记录的DWM功能在Windows 10上不再起作用...

  

编辑:我能够获取某些应用程序(例如Windows)的图像数据   资源管理器,Paint等,但是对于某些东西(例如,松弛)   零/黑色图像。

编辑:在捕获即VLC时,我得到以下信息:enter image description here

问题: 还有其他方法可以捕获硬件加速窗口的图像数据吗?

注意:我不想捕获整个桌面。

1 个答案:

答案 0 :(得分:1)

您可以将PrintWindow与nFlags = 2一起使用 或使用放大API(不包括Windows) 或尝试破解dwm.exe。