C# 识别USB设备,获取设备全称以及对应端口号 CP210X为例

//相关命名空间
using System.IO.Ports;
using System.Management;
//相关全局变量
public static SerialPort Hcom = new SerialPort();
private uint HusbCount = 0;
private string HusbInfo = string.Empty;
//核心代码
if (!Hcom.IsOpen)
            {
                int portNum, HPortNum = 0,searcherNum=0;
                string[] PortNames = SerialPort.GetPortNames();
                string[] deviceName = new string[10];
                string Hkey = "CP210X";
                string HCom = null;
                bool isContains = false;
                Int32 numOfDevices = 0;
                CP210x.GetNumDevices(ref numOfDevices);//CP210x连接数量
                Console.WriteLine("GetNumDevices:" + numOfDevices);
                using (ManagementObjectSearcher searcher = new ManagementObjectSearcher
                ("select * from Win32_PnPEntity where Name like '%(COM%'"))
                {
                    var hardInfos = searcher.Get();                   
                    foreach (var hardInfo in hardInfos)
                    {

                        if (hardInfo.Properties["Name"].Value != null)
                        {
                            deviceName[searcherNum] = hardInfo.Properties["Name"].Value.ToString();
                            Console.WriteLine(deviceName[searcherNum]);
                            isContains = deviceName[searcherNum].IndexOf(WTkey, StringComparison.OrdinalIgnoreCase) > 0;
                            if (isContains)
                            {
                                WTCom = deviceName[searcherNum].Substring(40,4);
                                Log.Debug("WTCom is " + WTCom);
                            }
                            searcherNum++;
                        }
                    }
                }
                if (numOfDevices > 0)
                {
                    for (portNum = 0; portNum < PortNames.Count(); portNum++)
                    {
                        System.Console.WriteLine("PortNames " + portNum + " is:" + PortNames[portNum]);
                        
                        if (PortNames[portNum] == HCom)
                        {
                            HPortNum = portNum;
                            Log.Debug("HPortNum is " + HPortNum);
                        }
                    }
                    if (HPortNum > 0 && HPortNum <= portNum)
                    {
                        Hcom.PortName = PortNames[HPortNum];
                        Hcom.BaudRate = 460800;
                        Hcom.Parity = Parity.None;
                        Hcom.StopBits = StopBits.One;
                        Hcom.DataBits = 8;
                        Hcom.DataReceived += new SerialDataReceivedEventHandler(H_Decode_com_DataReceived);
                        Hcom.ReceivedBytesThreshold = 13;
                        Hcom.RtsEnable = true;
                        Hcom.Open();
                        WTcom.DiscardInBuffer();//丢弃传输缓冲区数据
                        WTcom.DiscardOutBuffer();//每次丢弃接收缓冲区的数据
                    }
                    else
                    {
                        Log.Debug("No HPort");
                    }
                }
                else
                {
                    Log.Debug("No HUSB");
                }
            }
发布了16 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Hilaph/article/details/88018834