以编程方式确定系统是否具有可切换的图形

时间:2013-08-08 09:22:45

标签: c# .net wpf video d3dimage

我们在WPF应用程序中使用可切换显卡(AMD Radeon 7670M + Intel 4000)的笔记本电脑遇到以下问题:

我们用于显示某些视频的D3DImage仅显示黑框。仅当独立图形(AMD)对应用程序处于活动状态(模式设置为高性能)时才会发生这种情况。英特尔图形处于活动状态(模式设置为省电模式)可以正常工作。看起来我们并不孤单这个问题。搜索谷歌在AMD论坛上发布了以下帖子:

我找到了一个使用D3DImage.CopyBackBuffer的解决方法 - 看起来backbuffer确实包含了正确的框架 - 所以我会尝试显示它。

但是为了仅在必要时应用此解决方法,这让我想到了这个问题的主题:如何确定系统实际是否具有可切换图形?
我想可能有一些方法可以使用WMI或浏览注册表,但如果有人能指出我正确的方向,或者甚至可能有一个例子,我会很高兴。

更新

我尝试过EnumDisplayDevices和System.Management.ManagementObjectSearcher。 第一个没有返回所有设备而后者没有。但也许还有更好的方法呢?

2 个答案:

答案 0 :(得分:0)

可能是搜索驱动程序名称是另一个答案。但是不完全正确。因为可以更新驱动程序。所以我更喜欢使用System.Management.ManagementObjectSearcher。

答案 1 :(得分:0)

运气好的话,您可以使用WMI查询来获取System.Management.ManagementObjectSearcher的信息,但它可能与Windows和驱动程序版本非常紧密相关。

我认为您真正的问题是当丢失硬件设备并且转储硬件相关资源(表面和VRAM分配的内存)时,您错过了关键事件。尝试订阅此类活动https://msdn.microsoft.com/en-us/library/system.windows.interop.d3dimage.isfrontbufferavailablechanged.aspx 为了捕捉切换并将硬件表面重建为新的图形上下文。