C#检测哪个显卡驱动视频

时间:2011-05-13 12:52:03

标签: c# .net

我的C#应用​​程序位于具有Intel主板和图形芯片组的嵌入式盒子上。 ATI显卡放在PCI Express上。通常显卡会驱动视频,但如果ATI卡出现故障,则视频会从图形芯片组中传出。

我必须检测ATI显卡的故障以进行诊断。

有关如何执行此操作的任何想法/示例代码。

提前致谢 拉朱

5 个答案:

答案 0 :(得分:19)

这应该可以让你开始。

添加对System.Management的引用,然后您可以执行此操作:

ManagementObjectSearcher searcher 
     = new ManagementObjectSearcher("SELECT * FROM Win32_DisplayConfiguration");

    string graphicsCard = string.Empty;
    foreach (ManagementObject mo in searcher.Get())
    {
        foreach (PropertyData property in mo.Properties)
        {
           if (property.Name == "Description")
           {
               graphicsCard = property.Value.ToString();
           }
        }
    }

就我而言,graphicsCard等于

  

NVIDIA GeForce 8400 GS(微软   公司 - WDDM v1.1)

答案 1 :(得分:7)

我并不喜欢所选答案如何仅返回第一个视频控制器。而且,不需要遍历所有属性。得到你需要的。如果CurrentBitsPerPixel不为null,那么您正在查看其中一个活动控制器。我按照@bairog的建议使用Win32_VideoController,而不是弃用的Win32_DisplayConfiguration。

ManagementObjectSearcher searcher = 
    new ManagementObjectSearcher("SELECT * FROM Win32_VideoController");
foreach (ManagementObject mo in searcher.Get())
{
    PropertyData currentBitsPerPixel = mo.Properties["CurrentBitsPerPixel"];
    PropertyData description = mo.Properties["Description"];
    if (currentBitsPerPixel != null && description != null)
    {
        if (currentBitsPerPixel.Value != null)
            System.Console.WriteLine(description.Value);
    }
}

我的机器有3个视频控制器。第一个不活跃(ShoreTel)。第二个是活动的,但不是视频卡(Desktop Authority)。第三个是我的NVidia。此代码将打印出DA控制器和NVidia控制器。

答案 2 :(得分:2)

促销回答仅适用于单个视频卡系统。当我有ATI和Nvidia卡时 - 即使该显示器插入Nvidia卡,WMI查询返回ATI,dxdiag显示Nvidia并且该卡上运行游戏(使用)。

我能确定正确视频卡的唯一方法是使用SlimDX创建DX设备并检查它使用的是什么卡。但是.dll的重量超过3Mb。

var graphicsCardName = new Direct3D().Adapters[0].Details.Description;

答案 3 :(得分:1)

你的问题并不完全清楚,所以我不确定这个想法是否会有所帮助。

或许非常简单就足够了:

如果两个显卡运行不同的分辨率,请使用以下方法检查显示器分辨率:

System.Windows.Forms.SystemInformation.PrimaryMonitorSize

同样,如果一张卡支持多个监视器,请使用SystemInformation.MonitorCount检查监视器的数量。

答案 4 :(得分:0)

我尝试了这个问题的所有方法,但没有一个给我一个正确的答案。但是我发现使用Win32_DisplayControllerConfiguration类可以获得当前。虽然根据MSDN这个类已过时,但它是唯一一个返回正确答案的类:

using System;
using System.Management;
using System.Windows.Forms;

namespace WMISample
{
    public class MyWMIQuery
    {
        public static void Main()
        {
            try
            {
                ManagementObjectSearcher searcher = 
                    new ManagementObjectSearcher("root\\CIMV2", 
                    "SELECT * FROM Win32_DisplayControllerConfiguration"); 

                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("-----------------------------------    ");
                    Console.WriteLine("Win32_DisplayControllerConfiguration instance");
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("Name: {0}", queryObj["Name"]);
            }
            }
            catch (ManagementException e)
            {
                MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
            }
        }
    }
}

(由WMI Code Creator生成的代码,如果您正在搞乱WMI,这是一个很好的工具。)

这会在我的 Windows 10(RS2)+英特尔(R)HD Graphics 4600 + NVIDIA GeForce GTX 1080 系统上提供GeForce GTX 1080