【发布时间】:2009-11-18 14:42:24
【问题描述】:
托管代码中是否可以列出系统上安装的调制解调器/电话设备? 如果.Net 没有办法,你能给我指个方向吗?
【问题讨论】:
-
调制解调器?我记得那些...虽然我也记得软盘和打印机...
托管代码中是否可以列出系统上安装的调制解调器/电话设备? 如果.Net 没有办法,你能给我指个方向吗?
【问题讨论】:
WMI 将在Win32_POTSModem 类中包含您需要的所有信息。在 C# 或 .Net 中,您可以利用 System.Management 命名空间来查询 WMI。
在 .Net 中,您可以使用平台 SDK 中的MgmtclassGen.EXE 来生成代表 WMI 类的类对象。
命令行应该是这样的:
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\mgmtclassgen.exe Win32_POTSModem /L CS /P c:\POTSModem\Win32_POTSModem.cs
然后你可以在你的代码中使用它:
using System;
using System.Collections.Generic;
using System.Management;
using ROOT.CIMV2.Win32;
public class MyClass
{
public static void Main()
{
foreach (POTSModem modem in POTSModem.GetInstances()) {
Console.WriteLine(modem.Description);
}
}
}
输出如下所示:
ThinkPad Modem - Internal Modem
Speed: 56000
您可能还想看看这篇文章:CodeProject: How To: (Almost) Everything In WMI via C# - Part 3: Hardware.。作者围绕 WMI 对象创建了一个简单的类包装器,类似于 MgmtclassGen.exe,但它全部为您完成。
【讨论】:
只是对后代的一些想法。
@Christopher_G_Lewis 提供了非常好的解决方案。
但在使用 WMI 之前,我们必须检查 Windows Management Instrumentation(WMI,服务名称 Winmgmt)是否正常工作(怎么做?)。当然,MS 建议不要碰这个服务,因为它是系统的一部分,但人们有时会关闭它。
此外,有时在使用之前check WMI version 可能会有所帮助。
如果您想获取当前已连接的调制解调器列表,您可以查看this solution。它运行缓慢,但会显示所有连接的调制解调器并排除Null modem cables。
【讨论】: