2010-03-30 85 views
10

C#是否提供了扫描可用COM端口的有效方法?我想在我的应用程序中有一个下拉列表,用户可以选择其中一个检测到的COM端口。创建并填充下拉列表不是问题。我只需要知道如何使用C#扫描可用的COM端口。我正在使用Microsoft Visual C#2008速成版。谢谢。如何在C#中扫描COM端口?

回答

13

System.IO.Ports是你想要的命名空间。

SerialPort.GetPortNames将列出所有串行COM端口。

不幸的是,并行端口并不直接支持C#,因为它们在传统情况下很少使用。这就是说,你可以通过查询以下注册表项列出来:

HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\PARALLEL PORTS 

见命名空间的细节。

+1

感谢您的额外的细节,但我真的只是列出串行COM端口(不是传统的并行)感兴趣。 – 2010-03-30 21:48:54

+1

@Jim Fell:我第一次发布的时候就想到了,但第二个想法决定明确平行,以防万一。 – Randolpho 2010-03-30 21:53:26

+1

@Randolpho我很欣赏它,因为这只是针对LPT的Google搜索结果。 :) – 2014-01-14 14:19:37

2

通过System.Management命名空间使用WMI。快速谷歌发现此代码:

using System; 
using System.Management; 

public class Foo 
{ 
    public static void Main() 
    { 
     var instances = new ManagementClass("Win32_SerialPort").GetInstances(); 
     foreach (ManagementObject port in instances) 
     { 
      Console.WriteLine("{0}: {1}", port["deviceid"], port["name"]); 
     } 
} 
+0

SerialPort.GetPortNames更好的解决方案! – 2010-03-30 21:03:52

+2

SerialPort.GetPortNames使用不保持最新的注册表数据。如果用户正在插拔很多东西,我发现管理类方法更可靠。 – SteveCav 2011-09-05 00:52:29

+0

只需要枚举端口并进入WMI即可。但是,它似乎没有包含USB到串口适配器,或者至少它们不在列表中。使用'SerialPort.GetPortNames',他们是,并且列表立即更新。 – OregonGhost 2011-09-23 09:40:08