RT,如何取得所有COM口的列表。比如现在有 通讯端口(COM1),通讯端口(COM2),通讯端口(COM3),Usb To Serial com port(COM4),我就要这1,2,3,4这几个数字

解决方案 »

  1.   

    private static void TestRegex18()
    {
        string yourStr = @"通讯端口(COM1),通讯端口(COM2),通讯端口(COM3),Usb To Serial com port(COM4)";
        MatchCollection mc = Regex.Matches(yourStr,"(?<=COM)\\d+");
        List<int> ports = new List<int>();
        foreach (Match item in mc)
        {
            ports.Add(int.Parse(item.Value));
        }
        foreach (int port in ports)
        {
            Console.WriteLine(port);
        }
        //ports就是你要的
    }
      

  2.   

    兄台,你误会我的意思了。我是说当前系统里有哪些COM口,能通过程序取得所有串口号。因为我要通过轮询串口检测到设备当前连接的是哪个口
      

  3.   

    string[] port_names = SerialPort.GetPortNames();
      

  4.   

    可以用 C#类 Registry 查硬件注册表
    [HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM]
    "\\Device\\Serial0"="COM1"
      

  5.   


    即插即用设备先要注册才能使用。即:当能使用之前,注册表中已经注册好了。随便找个USB接口设备一试便知。其它传统接口,一般要重启后才能使用。
      

  6.   

    HKEY_LOCALE_MACHINE\Hardware\Devicemap\Serialcomm
    RegistryKey keyCom = Registry.LocalMachine.OpenSubKey("Hardware\\DeviceMap\\SerialComm");  
    if (keyCom != null)              

                  string[] sSubKeys = keyCom.GetValueNames();  
                   this.cbbPort.Items.Clear();  
                   foreach (string sName in sSubKeys)  
                 {  
                        string sValue = (string)keyCom.GetValue(sName);  
                        this.cbbPort.Items.Add(sValue);  
                    }  
               } 
    Win32   API   EnumPorts   
      

  7.   

    操作系统底层如果有错误,.net的托管封装类库不会得到正确数据
      

  8.   

    string [] spname=System.IO.Ports.SerialPort.GetPortNames();
                if (spname.Length > 0)
                {
                    foreach (string spName in spname)
                        comboBox_spName.Items.Add(spName);//得到所有串口号
    }