4

托管代码中是否可以列出系统上安装的调制解调器/电话设备?如果.Net 没有办法,你能给我指明一个方向吗?

4

2 回答 2

6

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,但这一切都是为您完成的。

于 2009-11-18T14:57:53.093 回答
1

只是对后代的一些想法。

@Christopher_G_Lewis 提供了非常好的解决方案。但在使用 WMI 之前,我们必须检查Windows Management Instrumentation( WMI, service name Winmgmt) 是否正常工作(如何做?)。当然,MS 建议不要碰这个服务,因为它是系统的一部分,但人们有时会关闭它。

此外,有时在使用之前检查 WMI 版本可能会有所帮助。

如果您想获取当前已连接的调制解调器列表,可以查看此解决方案。它运行缓慢,但显示所有连接的调制解调器并排除.Null modem cables

于 2011-09-28T00:25:56.633 回答