C#检测声卡

时间:2009-05-27 16:18:05

标签: c#

C#2008

我使用下面的代码来确定用户是否安装了声卡。我找到了两种方法,并想知道一种方法是否优于另一种方法。有什么比我发布的更好吗?

我在Windows桌面上检测到这个正在运行的XP,Vista和Seven。

非常感谢任何建议,

public partial class Form1 : Form
{
    [DllImport("winmm.dll", SetLastError = true)]
    public static extern uint waveOutGetNumDevs();

    public Form1()
    {
        InitializeComponent();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        if (waveOutGetNumDevs() != 0)
        {
            Console.WriteLine("The sound card is detected");
        }
        else
        {
            Console.WriteLine("No sound card");
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        ManagementObjectSearcher searcher = 
            new ManagementObjectSearcher("Select ProductName from Win32_SoundDevice");

        foreach (ManagementObject device in searcher.Get())
        {
            Console.WriteLine("Sound card {0}", 
                device.GetPropertyValue("ProductName"));

        }


    }
}

1 个答案:

答案 0 :(得分:1)

我个人更喜欢WMI(你的第二个解决方案)通过p / Invoke引用Win32 API(你的第一个解决方案)......我认为这可能是一个偏好的问题。 Win32 API可以使用,显然比WMI具有潜在的本机性能优势。也就是说,WMI是为了这种目的提供的,为什么不使用呢?

两者都有其优点和缺点,虽然WMI比Win32 API更直观,更灵活,但您可以使用相对全面的查询语言进行查询,维护简单,易于阅读,它可以完成工作打算很好,这是与操作系统配置进行通信,这正是你想要做的。

因此我的结论是(在我看来)WMI是要走的路。就像我说的那样,这只是我的意见,并且有点主观。