具体截图window(HWND,HW加速)
Screenshot of the specific window (HWND, HW accelerated)
我需要捕获使用硬件加速的特定 window (HWND) 的 snapshots/screenshots,并将它们记录到视频流中。
在使用 BitBlt
或 PrintWindow
时,只有当 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 的未记录函数 DwmpDxUpdateWindowSharedSurface
和 DwmpDxGetWindowSharedSurface
。我设法检索到了看起来像有效 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.
我需要捕获使用硬件加速的特定 window (HWND) 的 snapshots/screenshots,并将它们记录到视频流中。
在使用 BitBlt
或 PrintWindow
时,只有当 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 的未记录函数 DwmpDxUpdateWindowSharedSurface
和 DwmpDxGetWindowSharedSurface
。我设法检索到了看起来像有效 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.