windows 列出可用的COM端口

x0fgdtte  于 2023-05-01  发布在  Windows
关注(0)|答案(5)|浏览(167)

我有一个非常小的代码,显示可用的COM端口。
我的问题是:
有没有一个简单的方法让程序运行在托盘和只有弹出时,一个新的COM端口可用,它是可能添加名称的COM端口,你可以看到在设备管理器ec“USB串行端口”?
我经常添加/删除一个USB-〉RS232转换器,并发现它是一个痛苦的屁股,因为我必须进入设备管理器,看看它被分配到什么COM端口。每次都不一样
也许已经有一个小应用程序可以做到这一点,但我还没有找到它在谷歌

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)
    {
    }
}

}

t0ybt7op

t0ybt7op1#

public static void Main()
    {
        // Get a list of serial port names.
        string[] ports = SerialPort.GetPortNames();

        Console.WriteLine("The following serial ports were found:");

        // Display each port name to the console.
        foreach(string port in ports)
        {
            Console.WriteLine(port);
        }

        Console.ReadLine();
    }
s71maibg

s71maibg2#

看看this question。它使用WMI查找可用的COM端口。您可以跟踪存在哪些COM端口,并且只通知新的COM端口。

bxgwgixi

bxgwgixi3#

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

nmpmafwu

nmpmafwu4#

获取某个设备的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);
7lrncoxx

7lrncoxx5#

我使用的是.NET 6。我得到了Md.Rakibuz苏丹的答案,在添加了nuget包系统后工作。IO端口

Program.cs:

using System.IO.Ports;

internal class Program
{
    private static void Main(string[] args)
    {
        // Get a list of serial port names.
        string[] ports = SerialPort.GetPortNames();

        Console.WriteLine("The following serial ports were found:");

        // Display each port name to the console.
        foreach (string port in ports)
        {
            Console.WriteLine(port);
        }

        Console.ReadLine();
    }
}

相关问题