// A string array consists of port names. string[] ports2 = SerialPort.GetPortNames();
var searcher = new ManagementObjectSearcher("SELECT DeviceID,Caption FROM WIN32_SerialPort"); foreach (ManagementObject port in searcher.Get()) { // ex: COM7 string name = port.GetPropertyValue("DeviceID").ToString(); // ex: Arduino Uno (COM7) string description = port.GetPropertyValue("Caption").ToString(); // do what ever you want... }
/*************************************************** * 搜尋所有COM Port * 入口: Task_GetAllComPorts() *************************************************** */ List<ComPortQuery> gAllComPorts; struct ComPortQuery { public string name; public string description; public ComPortQuery(string name, string description) { this.name = name; this.description = description; } } // Method 2 function private List<ComPortQuery> GetSerialPort2() { List<ComPortQuery> ports = new List<ComPortQuery>(); var searcher = new ManagementObjectSearcher("SELECT DeviceID,Caption FROM WIN32_SerialPort"); foreach (ManagementObject port in searcher.Get()) { // show the service ComPortQuery c = new ComPortQuery(); c.name = port.GetPropertyValue("DeviceID").ToString(); c.description = port.GetPropertyValue("Caption").ToString(); ports.Add(c); } return ports; } private void Task_GetAllComPorts() { /* 掃描所有COM Port,接結果存於 List<ComPortQuery>gAllComPorts 中 */ if (gAllComPorts == null) gAllComPorts = new List<ComPortQuery>(); gAllComPorts.Clear(); /* 清除 */ // 用 Method 2 初步掃描 List<ComPortQuery> ports = GetSerialPort2(); foreach (ComPortQuery port in ports) { gAllComPorts.Add(port); } // 用 Method 1 再次掃描 string[] ports2 = SerialPort.GetPortNames(); foreach (string port in ports2) { // 只需檢查Port Name是否有重複的 if (!gAllComPorts.Exists(x => x.name == port)) { gAllComPorts.Add(new ComPortQuery(port, port)); } } return; }
PS> gwmi Win32_DriveDisk