Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 20.05.2021
Сообщений: 150
Builder 6

Получить список COM портов

04.06.2025, 08:03. Показов 3794. Ответов 9

Студворк — интернет-сервис помощи студентам
Всем привет.
Пришлось апгрейдить старенький проект на Builder6 (Win10-64).
В задачу входит получение списка доступных COM-портов, выводимого в ListBox (в примере ниже ComList).
Когда-то я это делал без затей.
Вроде делаю по классике, используя библиотечный TRegistry:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  TRegistry* Reg = new TRegistry;
    TStringList *Names = new TStringList;
    __try
    {
        Reg->RootKey = HKEY_LOCAL_MACHINE;
        if (Reg->OpenKey("HARDWARE\\DEVICEMAP\\SERIALCOMM", false))
        {
            Reg->GetValueNames(Names);
            for(int i = 0; i < Names->Count; i++)
            {
                AnsiString value = Reg->ReadString(Names->Strings[i]);
                if( value.SubString(1, 3) == "COM" )
                  ComList->Items->Add(value);
            }
            Reg->CloseKey();
        }
    }
    __finally
    {
        delete Names;
        delete Reg;
    }
Но первая же строчка открытия ключа при вызове возвращает False. И дальше облом.
Открыл этот раздел в редакторе реестра.
Там все на месте: порты присутствуют, ключи совпадают.
А функция не исполняется.
Что может быть не так?
PS: мои права на компе позволяют мне править реестр.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.06.2025, 08:03
Ответы с готовыми решениями:

[Qt] Получить список tcp соединений и прослушиваемых портов
Никак не могу найти, как получить список текущих подключений. Нужна такая же информация, как при...

Список сом-портов, доступных в системе
Кто-нибудь разбирался как получить Список сом-портов, доступных в системе? Пока единственный...

Список COM портов
Может кто-нибудь написать простой примерчик для получения списка ком портов в с++. В нете читал...

9
Эксперт .NET
 Аватар для Rius
13029 / 7596 / 1663
Регистрация: 25.05.2015
Сообщений: 23,138
Записей в блоге: 14
04.06.2025, 08:21
Только для чтения открыть есть возможность?

Delphi
1
reg.OpenKeyReadOnly
1
Модератор
 Аватар для D1973
9907 / 6444 / 2455
Регистрация: 21.01.2014
Сообщений: 27,352
Записей в блоге: 3
04.06.2025, 08:51
Лучший ответ Сообщение было отмечено АнаП как решение

Решение

Цитата Сообщение от АнаП Посмотреть сообщение
Что может быть не так?
- В Win 8.1/10/11 для доступа к разделу реестра HKLM необходимы права администратора. Если Вы скомпилируете Ваше приложение и запустите ехе-файл от имени администратора, то результат будет тот, который Вы ожидаете.
- Открывайте раздел в режиме "Только для чтения":
C++
1
if(reg->OpenKeyReadOnly("HARDWARE\\DEVICEMAP\\SERIALCOMM")) ...
1
2 / 2 / 0
Регистрация: 20.05.2021
Сообщений: 150
04.06.2025, 10:47  [ТС]
Спасибо, коллеги! Недоглядел.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,142
Записей в блоге: 3
04.06.2025, 17:42
Добавлю 5 коп.
Недавно была задача автоматически определять COM порт для сканера RFID меток, и у меня были сценарии когда в реестре были разные пути для чтения данных, а иногда в реестре вообще не отмечалось. Универсальным методом оказался WMI.

Это я так, просто мало ли будет информация полезна.
0
Эксперт .NET
 Аватар для Rius
13029 / 7596 / 1663
Регистрация: 25.05.2015
Сообщений: 23,138
Записей в блоге: 14
04.06.2025, 18:16
Цитата Сообщение от Dinkin Посмотреть сообщение
Универсальным методом оказался WMI.
Но есть у него одно НО: он ТОРМОЗНОЙ!
А нет, два: если драйвер пропишет кривое значение в систему, то этот метод падает.

Добавлено через 5 минут
Демо: Определить имя устройства на com порту
2
2 / 2 / 0
Регистрация: 20.05.2021
Сообщений: 150
05.06.2025, 10:40  [ТС]
Коллеги, напомните: как указывается имя COM порта при открытии порта для больших индексов?
У меня на компе уже уже скоро четвертый десяток будет.
Открываю в 6м билдере через CreateFile.
Порт с именем "COM5" открывается.
А с именем "COM30" нет.
Припоминаю: для длинных индексов так какое-то особое правило именования было при открытии порта.
У меня имена выбираются из списка реестра винды.
И их я подставляю в функцию открытия порта, выбирая из листбокса.
0
Эксперт .NET
 Аватар для Rius
13029 / 7596 / 1663
Регистрация: 25.05.2015
Сообщений: 23,138
Записей в блоге: 14
05.06.2025, 10:45
Лучший ответ Сообщение было отмечено АнаП как решение

Решение

Выше 9:
\\.\COMx
0
2 / 2 / 0
Регистрация: 20.05.2021
Сообщений: 150
05.06.2025, 11:21  [ТС]
\\.\COMx - Тут явно присутствует экранирование символов и не очень понятно как должна выглядеть реальная строка в коде для порта "СОМ30"?
Я полагаю CreateFile("\\.\COM30", ...)?
Дополнительных символов в имя порта подставлять не нужно?

Добавлено через 5 минут
Спасибо, откопал нужную статейку. :-)
0
Эксперт .NET
 Аватар для Rius
13029 / 7596 / 1663
Регистрация: 25.05.2015
Сообщений: 23,138
Записей в блоге: 14
05.06.2025, 11:50
В коде
C++
1
"\\\\. \\COMx"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.06.2025, 11:50
Помогаю со студенческими работами здесь

Как узнать список доступных портов в Qt
Здравствуйте, я хочу создать программу для &quot;общения&quot; с ардуино. Мне нужно узнать доступные порты и...

3 класса: список, стек(как список), очередь(как список)
препод дал задание: написать 3 класса (список, стек, очередь), методы: вывод, добавление,...

Создать список L3 из элементов, входящих и в список L1 и в список L2
создать список л3 из элементов входящих и в список л1 и в список л2

Создать список L3 из элементов, которые входят в список L1 и не входят в список L2
Нужно создать список L3 из элементов, которые входят в список L1 и не входят в список L2, вернуть...

Создать список L3 из элементов, которые входят в список L1 и не входят в список L2
Задание : Создать список L3 из элементов, которые входят в список L1 и не входят в список L2,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru