Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 特定窗口的屏幕截图(HWND、HW加速)_Windows_Screenshot_Screen Capture_Dwm_Screen Recording - Fatal编程技术网

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

Windows 特定窗口的屏幕截图(HWND、HW加速),windows,screenshot,screen-capture,dwm,screen-recording,Windows,Screenshot,Screen Capture,Dwm,Screen Recording,我需要捕获使用硬件加速的特定窗口(HWND)的快照/屏幕快照,并将其记录到视频流中 当使用BitBlt或PrintWindow时,只有在该窗口没有硬件加速的情况下,我才能捕获图像数据,否则我会得到黑色纹理 尝试使用User32.dll的未记录DwmGetDxSharedSurface获取DirectX曲面句柄。但它失败了,出现了一个错误: 错误\u图形\u显示\u重定向\u禁用-桌面窗口 管理子系统关闭 (编辑:某些应用程序失败,如“calculator.exe”) 尝试使用Dwmapi.dll

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

当使用
BitBlt
PrintWindow
时,只有在该窗口没有硬件加速的情况下,我才能捕获图像数据,否则我会得到黑色纹理

尝试使用User32.dll的未记录
DwmGetDxSharedSurface
获取DirectX曲面句柄。但它失败了,出现了一个错误:

错误\u图形\u显示\u重定向\u禁用-桌面窗口 管理子系统关闭

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

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

编辑:我可以为一些应用程序(如Windows)获取图像数据 探险家、油漆等,但对于某些人,如Slack,我得到了全部 零/黑色图像

编辑:当捕获即VLC时,我得到:

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


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

您可以使用带有nFlags=2的PrintWindow 或使用放大API(不包括窗口)
或者尝试破解dwm.exe。

应用程序使用哪种技术?它是否只在UWP应用程序上失败?DWM缩略图API有效吗?还是为空?@Anders我正在用windows calculator.exe测试。DWM缩略图能够捕获并在我的窗口中显示复制的“缩略图”图像。但是DwmGetDxSharedSurface(User32.dll)由于指定的错误而失败。找到解决方案了吗?我也吃同样的issue@user1428926我没有,如果你愿意,请让我知道。谢谢。我不知道“PW_RENDERFULLCONTENT”标志(nFlags=2)。“PrintWindow”文档中没有相关信息。。