我也尝试使用DirectX 桌面复制 API。
\n\n我尝试运行示例
\n\nhttp://www.codeproject.com/Tips/1116253/Desktop-Screen-Capture-on-Windows-via-Windows-Desk
\n\n并从
\n\nhttps://code.msdn.microsoft.com/windowsdesktop/Desktop-Duplication-Sample-da4c696a
\n\n这两个都是使用 DXGI 进行屏幕捕获的示例。
\n\n我的机器上NVIDIA GeForce GTX 1060有。Windows 10 Pro它有Intel\xe2\x84\xa2 Core i7-6700HQ处理器。
NVIDIA Control Panel > 3D Settings当选择为时,这些示例工作得非常好Auto select processor。
但是,如果我手动将设置设置为NVIDIA Graphics Card样本将停止工作。
以下行发生错误。
\n\n//IDXGIOutput1* DxgiOutput1\nhr = DxgiOutput1->DuplicateOutput(m_Device, &m_DeskDupl);\nRun Code Online (Sandbox Code Playgroud)\n\n错误hr(HRESULT)是DXGI_ERROR_UNSUPPORTED 0x887A0004
我是 DirectX 新手,我不知道这里的问题,NVIDIA 不支持 DirectX 桌面复制吗?
\n\n如果是这种情况,那么有没有办法在程序启动时选择特定处理器,以便程序可以使用任何设置运行?
\n\n#编辑
\n\n环顾四周后,我在codeproject.com上询问了第二个示例项目的开发人员 (Evgeny Pereguda)
\n\n\n\n在 codeproject.com 上发布讨论的屏幕截图,以防原始链接失效
\n\n\n\n我还在stackoverflow 上找到了一个答案,它明确表明无法使用桌面复制 API 来完成,参考微软支持网站的支持票https://support.microsoft.com/en-us/help/3019314/当桌面重复 api-capable-application-is-ru 时生成错误
\n\n门票上的报价
\n\n\n\n\n出现此问题的原因是 DDA 不支持针对 Microsoft 混合系统上的独立 GPU 运行。根据设计,在这种情况下,调用会失败并出现错误代码 DXGI_ERROR_UNSUPPORTED。
\n
然而,有一些应用程序可以在我的计算机上以两种模式(集成显卡和独立显卡)有效地复制 Windows 上的桌面。(https://www.youtube.com/watch?v=bjE6qXd6Itw)
\n\n我查看了Virtual Desktop我机器上的安装文件夹,可以看到以下DLLs感兴趣的内容
SharpDX.D3DCompiler.dll\nSharpDX.Direct2D1.dll\nSharpDX.Direct3D10.dll\nSharpDX.Direct3D11.dll\nSharpDX.Direct3D9.dll\nSharpDX.dll\nSharpDX.DXGI.dll\nSharpDX.Mathematics.dll\nRun Code Online (Sandbox Code Playgroud)\n\n这可能表明该应用程序正在使用 DXGI 来复制桌面,或者该应用程序可能能够在启动之前选择特定的处理器。
\n\n无论如何,问题仍然存在,是否有其他有效的方法在两种模式下复制桌面?
\n可能的原因是桌面复制 API 的某些内部限制,如针对独立 GPU 运行支持桌面复制 API 的应用程序时生成的错误中所述:
...当应用程序尝试针对 Microsoft 混合系统上的独立 GPU 复制桌面图像时,应用程序可能无法正确运行,或者可能会生成以下错误之一:
- 无法创建 Windows 交换链,代码为 0x80070005
- CDesktopCaptureDWM:IDXGIOutput1::重复输出失败:0x887a0004
除了使用不同的 GPU 之外,本文没有建议任何其他解决方法(没有更具体的细节来说明是否可以通过编程方式实现):
要解决此问题,请在 Microsoft 混合系统上的集成 GPU 上运行应用程序,而不是在独立 GPU 上运行。