c # - Liste ledige COM porte

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en meget lille kode, der viser tilgængelige COM-porte.


Mit spørgsmål er:


Er der en nem måde at få programmet til at køre i bakken, og kun popup når en ny COM-port er tilgængelig, og er det muligt at tilføje navnet på COM-porten, som du kan se i enhedsadministrator ec 'USB seriel port'?


Jeg tilføjer/fjerner ofte en USB-> RS232-konverter og finder det til en smerte i rækken, fordi jeg skal gå ind i enheden manger for at se, hvilken COM-port den er tildelt. Det er ikke det samme hver gang


Måske er der allerede en lille app, der kan gøre dette, men jeg har ikke fundet det på Google endnu


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


}

Bedste reference


Tag et kig på dette spørgsmål. Det bruger WMI til at finde tilgængelige COM-porte. Du kan holde styr på, hvilke COM-porte der findes, og kun give besked om nye.

Andre referencer 1


For at finde ud af, hvornår enhederne er hot-plugged, vil du håndtere WM\_DEVICECHANGE. Ring til RegisterDeviceNotification for at aktivere levering af disse meddelelser. [7] [8]

Andre referencer 2


 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();
    }

Andre referencer 3


Koden for at få COM-nummeret på en bestemt enhed.


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);