Список доступных COM-портов - PullRequest
12 голосов
/ 27 марта 2011

У меня очень маленький код, который показывает доступные COM-порты.

Мой вопрос:

Есть ли простой способ запустить программу в трее и открывать ее только тогда, когдановый COM-порт доступен, и можно ли добавить имя для COM-порта, которое вы можете увидеть в диспетчере устройств или "последовательный порт USB"?

Я часто добавляю / удаляю преобразователь USB-> RS232 и нахожуэто боль в заднице, потому что я должен зайти в менеджер устройства, чтобы увидеть, какой COM-порт ему назначен.Каждый раз это не одно и то же

Возможно, уже есть небольшое приложение, которое может это сделать, но я еще не нашел его в Google

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

}

Ответы [ 4 ]

9 голосов
/ 17 апреля 2018
 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();
    }
7 голосов
/ 27 марта 2011

Взгляните на этот вопрос .Он использует WMI для поиска доступных COM-портов.Вы можете отслеживать, какие существуют COM-порты, и уведомлять только о новых.

5 голосов
/ 27 марта 2011

Чтобы узнать, когда устройства подключены в «горячем» режиме, вы должны обработать WM_DEVICECHANGE.Позвоните RegisterDeviceNotification, чтобы включить доставку этих уведомлений.

0 голосов
/ 09 ноября 2017

Код для получения номера 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...