2009-05-27 109 views
1

C#2008C#檢測聲卡

我正在使用下面的代碼來確定用戶是否安裝了聲卡。我發現了兩種方法,並想知道一種是否比另一種更好。有沒有比我發佈的更好的東西?

我在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

我個人比較喜歡WMI(你的第二個解決方案),以到p引用的Win32 API /調用(你的第一個解決方案)......我認爲這很可能是不過,這是一個偏好問題。 Win32 API可以使用,顯然比WMI具有潛在的本機性能優勢。也就是說,WMI提供了這種類型的用途,爲什麼不使用它?

雖然WMI比Win32 API更直觀,更靈活,但它們各有優缺點,您可以使用相對全面的查詢語言查詢它,它易於維護,易於閱讀,它可以完成這項工作它的目的是很好,那就是與操作系統配置進行通信,這正是你想要做的。

因此,我的結論是(在我看來)WMI是要走的路。就像我說的那樣,這僅僅是我的看法,而且有點主觀。