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"));
}
}
}
答案 0 :(得分:1)
我个人更喜欢WMI(你的第二个解决方案)通过p / Invoke引用Win32 API(你的第一个解决方案)......我认为这可能是一个偏好的问题。 Win32 API可以使用,显然比WMI具有潜在的本机性能优势。也就是说,WMI是为了这种目的提供的,为什么不使用呢?
两者都有其优点和缺点,虽然WMI比Win32 API更直观,更灵活,但您可以使用相对全面的查询语言进行查询,维护简单,易于阅读,它可以完成工作打算很好,这是与操作系统配置进行通信,这正是你想要做的。
因此我的结论是(在我看来)WMI是要走的路。就像我说的那样,这只是我的意见,并且有点主观。