如何使用 Windows 图形捕获 API CreateForWindow (hWnd) 复制 CAPTUREBLT 行为

How to replicate the CAPTUREBLT behavior with Windows Graphics Capture API CreateForWindow(hWnd)

提问人:ritesh singh chauhan 提问时间:10/11/2023 更新时间:10/11/2023 访问量:66

问:

我正在尝试通过从 CreateForWindow 获取 GraphicsCaptureItem 来使用 Windows 图形捕获 API 捕获窗口,并且它工作正常。但是,如果我将鼠标悬停在菜单下拉列表上,则无法捕获该窗口的工具提示,即使单击菜单下拉列表也无法捕获。 通过在捕获时提供 CAPTUREBLT 标志,BitBlt 也可以实现相同的目的。我们有办法实现相同的行为吗?

Windows WinAPI 屏幕捕获 Direct3D11 bitblt

评论

0赞 IInspectable 10/11/2023
据我了解,与窗口关联的仅表示该窗口的呈现图面。DWM 稍后使用它通过将各个表面相互叠加来组成最终桌面。若要获得完全合成的渲染,需要为显示器而不是窗口创建捕获项。但是,这将不再允许您捕获被其他窗口遮挡的窗口的某些部分。GraphicsCaptureItem
0赞 ritesh singh chauhan 10/12/2023
@IInspectable 是的,这是问题所在。我想捕获窗口以及所有菜单下拉列表和工具提示,这对于窗口的 GraphicsCaptureItem 来说似乎是不可能的。
0赞 IInspectable 10/12/2023
如果确实没有提供一种轻松捕获完全组合的窗口内容的方法,则解决方法是枚举所有拥有的窗口,单独捕获每个窗口,然后手动将捕获组合成最终图像。Windows.Graphics.Capture
0赞 ritesh singh chauhan 10/12/2023
是否可以在 GPU 中完成所有这些工作?我想尽量减少 CPU 的负载。
0赞 IInspectable 10/14/2023
在解决方案存在之前就想要“优化”它是没有意义的。撇开这一点不谈,我希望您可以将所有 Direct3D 表面保留在 GPU 内存中。

答: 暂无答案