ПОЛУЧИТЬ ДРУЖЕСТВЕННОЕ ИМЯ ПОРТА Программно - PullRequest
4 голосов
/ 21 февраля 2012

У кого-нибудь здесь есть идея, где я могу получить имя порта, указанное на моем ПК?

List of ports provided by Device Manager

Используя этот код:

For i As Integer = 0 To My.Computer.Ports.SerialPortNames.Count - 1
    cmbPort.Properties.Items.Add(My.Computer.Ports.SerialPortNames(i))
Next

Я мог бы получить COM26 и т. Д., Если таковые имеются, но это не то, что я хочу. Вместо получения COM26 я хочу USB-SERIAL CH340 или USB-SERIAL CH340 (COM26). Как я мог это сделать?

Ответы [ 4 ]

8 голосов
/ 04 февраля 2015

Я получил смешанные результаты из других ответов.Я придумал, как этот код работает лучше для меня.

Добавить ссылку на System.Management в вашем приложении

using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE Caption like '%(COM%'"))
{
    var portnames = SerialPort.GetPortNames();
    var ports = searcher.Get().Cast<ManagementBaseObject>().ToList().Select(p => p["Caption"].ToString());

    portList = portnames.Select(n => n + " - " + ports.FirstOrDefault(s => s.Contains(n))).ToList();
}
6 голосов
/ 21 февраля 2012

Попробуйте это.

Public Shared Function ListFriendlyCOMPOrt() As List(Of String)

    Dim oList As New List(Of String)

    Try
        Using searcher As New ManagementObjectSearcher("root\CIMV2", "SELECT * FROM Win32_PnPEntity WHERE Caption like '%(COM26%'")
            For Each queryObj As ManagementObject In searcher.Get()
                oList.Add(CStr(queryObj("Caption")))
            Next
        End Using

        Return oList

    Catch err As ManagementException
        MessageBox.Show("An error occurred while querying for WMI data: " & err.Message)
    End Try

    Return oList

End Function

Это должно работать ..

2 голосов
/ 21 февраля 2012

Вы можете использовать WMI ... Добавить ссылку на System.Management в своем приложении, тогда

отображается в StackOverflow: Получение информации о последовательном порте

using System.Management;
using System.IO;

        string result = "";
        using (var searcher = new ManagementObjectSearcher("SELECT * FROM WIN32_SerialPort"))
        {
            string[] portnames = SerialPort.GetPortNames();
            var ports = searcher.Get().Cast<ManagementBaseObject>().ToList();
            var tList = (from n in portnames join p in ports on n equals p["DeviceID"].ToString() select n + " - " + p["Caption"]).ToList();

            foreach (string s in tList)
            {
                result = result + s;
            }
        }
        MessageBox.Show(result);
0 голосов
/ 21 февраля 2012

Это не имя последовательного порта; это COM26. Имя, указанное в диспетчере устройств, вероятно, является именем устройства, обеспечивающего эмуляцию.

Зачем тебе это имя? Если вы опишите свою проблему более полно, выяснить решение будет проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...