列出可用的COM端口

我有一个非常小的代码,显示可用的COM端口。

我的问题是:

是否有一个简单的方法让程序在托盘中运行,只有当新的COM端口可用时才popup,并且可以添加设备pipe理器ec“USB串行端口”中可以看到的COM端口的名称?

我经常添加/移除一个USB-> RS232转换器,并发现它是一个痛苦的屁股,因为我必须进入设备pipe理器,看看它分配了什么COM端口。 每次都不一样

也许已经有一个小的应用程序可以做到这一点,但我还没有在Google上find它

using System; using System.Windows.Forms; using System.IO.Ports; namespace Available_COMports { public partial class Form1 : Form { public Form1() { InitializeComponent(); //show list of valid com ports foreach (string s in SerialPort.GetPortNames()) { listBox1.Items.Add(s); } } private void Form1_Load(object sender, EventArgs e) { } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { } } 

}

看看这个问题 。 它使用WMI来查找可用的COM端口。 您可以跟踪哪些COM端口存在,只通知新的。

要了解设备何时热插拔,您需要处理WM_DEVICECHANGE 。 调用RegisterDeviceNotification来启用这些通知的传递。

获取某个设备的COM号码的代码。

 List<USBDeviceInfo> devices = new List<USBDeviceInfo>(); ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_PnPEntity"); foreach (ManagementObject queryObj in searcher.Get()) { devices.Add(new USBDeviceInfo( (string)queryObj["DeviceID"], (string)queryObj["PNPDeviceID"], (string)queryObj["Name"] )); } foreach (USBDeviceInfo usbDevice in devices) { if (usbDevice.Description != null) { if (usbDevice.Description.Contains("NAME OF Device You are Looking for")) //use your own device's name { int i = usbDevice.Description.IndexOf("COM"); char[] arr = usbDevice.Description.ToCharArray(); str = "COM" + arr[i + 3]; if (arr[i + 4] != ')') { str += arr[i + 4]; } break; } } } mySerialPort = new SerialPort(str);