2009-05-27 2 views
1

C#2008C#サウンドカードの検出

以下のコードを使用して、サウンドカードをインストールしているかどうかを確認しています。私は2つの方法を見つけて、一方が他方よりも優れているのか疑問に思っています。私が投稿したものより優れたものはありますか?

私は、このXP、Vista、および7を実行しているWindowsデスクトップ上で検出しています。何かアドバイスのため

多くのおかげで、

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

私は個人的にP /呼び出し(あなたの最初のソリューション)を介してのWin32 APIを参照するには、WMI(あなたの第二の溶液)を好む...私は、これは可能性があると思いますしかし、好みの問題。 Win32 APIが使用されており、明らかにWMIよりもネイティブなパフォーマンス上の利点があります。つまり、WMIはまさにこのタイプの目的のために提供されたので、なぜそれを使用しないのですか?

WMIはWin32 APIよりも直感的で柔軟性がありますが、比較的包括的なクエリ言語を使用してクエリを実行できます。メンテナンスが簡単で読みやすく、ジョブを実行しますそれはうまくいくように意図されており、それはあなたがやろうとしているものであるオペレーティングシステムの設定と通信します。

私の結論は、(私の意見では)WMIが行く方法です。私が言ったように、これはちょうど私の意見であり、幾分主観的です。

関連する問題