List all System Modems

2019-05-07 11:26发布

问题:

Is there a way in managed code to list the Modem/Telephony devices installed on the system? If .Net does not have a way, could you point me in a direction?

回答1:

WMI will contain all the information you need in the Win32_POTSModem class. In C# or .Net, you can utilize the System.Management namespace to query WMI.

Within .Net, you can use MgmtclassGen.EXE from the platform SDK to generate a class object representing the WMI class.

The command line would be like this:

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\mgmtclassgen.exe Win32_POTSModem /L CS /P c:\POTSModem\Win32_POTSModem.cs

and then you can use that in your code:

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);
    }
  }
}

Output looks like this:

ThinkPad Modem - Internal Modem
        Speed: 56000

You also might want to take a look at this article: CodeProject: How To: (Almost) Everything In WMI via C# - Part 3: Hardware.. The author has created a simple class wrapper around WMI objects similar to MgmtclassGen.exe, but its all done for you.



回答2:

Just some thoughts for future generations.

@Christopher_G_Lewis provided very good solution. But before using WMI we have to check that Windows Management Instrumentation (WMI, service name Winmgmt) is working (how to do it?). Of course, MS recommends don't touch this service, because it's part of system stuff, but people switch it off sometimes.

Moreover, sometimes it may be helpful to check WMI version before using it.

If you want to get modems list which are connected at the moment, you can check out this solution. It works slowly, but shows all connected modems and excludes Null modem cables.