我正在尝试使用DirectX desktop duplication API。
我尝试从
运行exmapleshttp://www.codeproject.com/Tips/1116253/Desktop-Screen-Capture-on-Windows-via-Windows-Desk
来自
https://code.msdn.microsoft.com/windowsdesktop/Desktop-Duplication-Sample-da4c696a
这两个都是使用DXGI进行截屏的示例。
我在机器上有NVIDIA GeForce GTX 1060
Windows 10 Pro
。它有Intel™ Core i7-6700HQ
处理器。
当NVIDIA Control Panel > 3D Settings
选择Auto select processor
时,这些示例完全正常。
但是,如果我手动将设置设置为NVIDIA Graphics Card
,样本将停止工作。
错误发生在以下行。
//IDXGIOutput1* DxgiOutput1
hr = DxgiOutput1->DuplicateOutput(m_Device, &m_DeskDupl);
hr(HRESULT)
中的错误为DXGI_ERROR_UNSUPPORTED 0x887A0004
我是DirectX的新手,我不知道这个问题, NVIDIA不支持DirectX桌面复制吗?
如果是这种情况,那么有没有办法在程序开始时选择一个特定的处理器,以便程序可以在任何设置下运行?
#Edit
环顾四周之后,我向开发人员(Evgeny Pereguda)询问了codeproject.com
上的第二个样本项目在原始链接关闭的情况下,在codeproject.com上发布讨论的屏幕截图
我还发现answer on stackoverflow明确表示无法使用桌面复制API来引用微软支持网站上的支持服务单https://support.microsoft.com/en-us/help/3019314/error-generated-when-desktop-duplication-api-capable-application-is-ru
从票证中引用
出现此问题是因为DDA不支持对其进行运行 Microsoft Hybrid系统上的独立GPU。按设计,通话 与这样的错误代码DXGI_ERROR_UNSUPPORTED一起失败 场景。
但是有一些应用程序可以在我的机器上以两种模式(集成显卡和独立模式)有效地复制Windows上的桌面。 (https://www.youtube.com/watch?v=bjE6qXd6Itw)
我查看了我的计算机上Virtual Desktop
的安装文件夹,可以看到关注的DLLs
SharpDX.D3DCompiler.dll
SharpDX.Direct2D1.dll
SharpDX.Direct3D10.dll
SharpDX.Direct3D11.dll
SharpDX.Direct3D9.dll
SharpDX.dll
SharpDX.DXGI.dll
SharpDX.Mathematics.dll
这可能表明此应用程序正在使用DXGI复制桌面,或者可能是应用程序能够在启动之前选择特定处理器。
无论如何问题仍然存在,是否还有其他有效的方法在两种模式下复制桌面?
答案 0 :(得分:2)
可能的原因是桌面复制API存在某些内部限制,如Error generated when Desktop Duplication API-capable application is run against discrete GPU中所述:
...当应用程序尝试在Microsoft Hybrid系统上对独立GPU复制桌面映像时,应用程序可能无法正常运行,或者可能会生成以下错误之一:
- 无法使用0x80070005
创建Windows swapchain- CDesktopCaptureDWM:IDXGIOutput1 :: DuplicateOutput failed:0x887a0004
除了使用不同的GPU之外,本文没有提出任何其他解决方法(没有更具体的细节,因为它是否完全以编程方式实现):
要解决此问题,请在集成GPU上运行应用程序,而不是在Microsoft Hybrid系统上的独立GPU上运行。
答案 1 :(得分:1)
Microsoft 引入了一个注册表值,可以通过编程方式设置该值来控制应用程序在哪个 GPU 上运行。完整答案here。