Рейтинг:
12
Maciej Los
Посмотрите на это: Как показать доступные последовательные порты в Visual Basic | Microsoft Docs[^]
Dim ports As List(Of String) = My.Computer.Ports.SerialPortNames.Select(Function(sp) sp).ToList()
важное Примечание:
Имена портов берутся из системного реестра (например, HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM). Если реестр содержит устаревшие или иным образом неверные данные, то метод GetPortNames вернет неверные данные.
Источник:
Последовательный порт.Методом GetPortNames (Системы.ИО.Порта) | Майкрософт Документы[
^]
Чтобы решить вашу проблему, вы должны использовать
WMI Code Creator v1.0[
^] и поиск имен портов с помощью запроса WMI. Смотрите второе решение этой темы:
c# - получение информации о последовательном порте - переполнение стека[
^]
[РЕДАКТИРОВАТЬ]
Взгляните на пример:
Sub Main
Dim ports As List(Of SerialPortInfo) = Nothing
DIm qry As String = "SELECT * FROM Win32_PnPEntity WHERE Caption like '%COM%'"
'qry = "SELECT * FROM Win32_SerialPort"
Using searcher As New ManagementObjectSearcher("root\CIMV2", qry)
ports = searcher.Get().Cast(Of ManagementBaseObject)() _
.Select(Function(sp) New SerialPortInfo (CStr(sp("DeviceID")), CStr(sp("Caption")))) _
.ToList()
End Using
For Each mp As SerialPortInfo In ports
Console.WriteLine("{0} - {1}", mp.ID, mp.Name)
Next
End Sub
' Define other methods and classes here
Public Class SerialPortInfo
Public Sub New(_id As String, _name As String)
ID = _id
Name = _name
End Sub
Public ID As String = ""
Public Name As String = ""
End Class
Maciej Los
Спасибо, Карло.
Member 14563206
Большое вам спасибо за ответ, тем более что я никогда не мог себе представить такой маршрут (WMI) только через интернет-поиск!!
Я предполагаю, что WMI сгенерирует запрос примерно такой же, как в ссылке StackOverFlow, чтобы я просто вставил его в свой VB-код, как показано там????
Member 14563206
Правильно ли выглядит следующее?
strComputer = "."
Набор objWMIService = функция getobject("winmgmts:\\" &амп; strComputer &ампер; "\корень\пространстве имен cimv2")
Установите colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_SerialPort",,48)
Для каждого объекта в colItems
Объект WScript.Эхо "-----------------------------------"
Объект WScript.Echo "экземпляр Win32_SerialPort"
Объект WScript.Эхо "-----------------------------------"
Объект WScript.Эхо "имя:" & objItem.Name
Следующий
Maciej Los
Пожалуйста, ознакомьтесь с обновленным ответом.
Member 14563206
Большое вам спасибо!
Это совсем не то, что сгенерировано.
Несомненно, эта нить будет иметь ценность для многих других.
Прежде чем я начну реализовывать этот значительно отличающийся подход, не могли бы вы дать мне представление о том, почему многие подходы, которые я нашел в интернете, потерпели неудачу в моем случае?
Что делает мою ситуацию настолько отличной от всех других успешных случаев, которые я нашел в интернете?
Maciej Los
Всегда пожалуйста.
Ну, я понятия не имею ;)
Кстати: Пожалуйста, примите мой ответ как решение (зеленая кнопка).
Member 14563206
Я ТАК И СДЕЛАЮ!
Member 14563206
Я получаю ошибку:
Тип "ManagementObjectSearcher" не определен.
Это наводит на мысль:
Частный Класс ManagementObjectSearcher
Private v как строка
Частный qry в виде строки
Общественные Саб новый(в как строку, qry по состоянию строку)
Меня.в = в
Меня.qry по = qry по
Конец Подводной Лодки
End Класса
Что скажете вы?
Member 14563206
Я думаю, что получил ответ на свой последний вопрос здесь:
https://stackoverflow.com/questions/7813715/managementobjectsearcher-is-not-defined-even-after-adding-system-management-refe
Еще Раз Благодарю Вас!
Maciej Los
Рад слышать, что вы решаете проблему yourslef.
Удачи вам!
Ваше здоровье!
Мацей