Для начала подключите модуль Registry в области uses. Затем на форму нужно будет вынести кнопку и многострочное текстовое поле класса TMemo. Ну и по нажатию на кнопку написать следующий код:
procedure TForm1.Button1Click(Sender: TObject);
var
reg: TRegistry;
st: TStrings;
i: integer;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.OpenKey('hardware\devicemap\serialcomm', false);
st := TStringList.Create;
reg.GetValueNames(st);
for i := 0 to st.Count - 1 do
Memo1.Lines.Add(reg.ReadString(st.Strings[i]));
st.Free;
reg.CloseKey;
reg.free;
end;
Here's the translation of the text into Russian:
Это программное обеспечение Delphi, которое извлекает и отображает имена свободных портов COM на системе.
Вот разбивка кода:
Класс uses в начале файла включает модуль Registry, который предоставляет функции для работы с реестром Windows.
Создается форма (TForm1) с двумя компонентами: кнопкой (Button1) и текстовым полем (Memo1).
Когда кнопка нажата, выполняется процедура Button1Click.
Эта процедура делает следующее:
Создает новый экземпляр класса TRegistry, который представляет реестр Windows.
Устанавливает корневой ключ в HKEY_LOCAL_MACHINE, что соответствует локальному хиву реестра.
Открывает подключение к ключу hardware\devicemap\serialcomm, которое содержит информацию о устройстве для сериальной коммуникации (портах COM).
Создает новый экземпляр класса TStringList, который используется для хранения списка строк.
Вызывает метод GetValueNames на объекте реестра, передавая в него список строк как аргумент. Это извлекает имена всех значений, хранящихся под ключом hardware\devicemap\serialcomm.
Перебирает список строк с помощью цикла for, и для каждого элемента читает значение из реестра с помощью метода ReadString и добавляет его в коллекцию строк текстового поля.
Результатом будет список имен свободных портов COM на системе. Обратите внимание, что это код только извлекает имена портов, но не открывает или использует их.
Альтернативное решение:
Вместо использования класса TRegistry можно использовать класс WMI Win32_Processor для извлечения информации о устройствах для сериальной коммуникации (портах COM) на системе. Вот пример:
uses
Winapi.Wmi;
...
procedure TForm1.Button1Click(Sender: TObject);
var
wmi: IWbemServices;
device: Win32_SerialController;
begin
wmi := CreateWMIObject(WBEM_FLAG_RETURN_IMMEDIATELY);
device := wmi.Get('Win32_SerialController');
Memo1.Lines.Add(device.Name);
end;
Этот код использует функцию CreateWMIObject для создания соединения WMI, а затем вызывает метод Get на классе Win32_SerialController для извлечения информации о устройствах. Результатом будет список имен свободных портов COM на системе.
Обратите внимание, что это код требует Windows XP или более поздней версии, а также компонента WMI установленного. Кроме того, это код более платформо-независимый, чем оригинальный код, но все еще зависит от функциональности Windows.
В статье описывается способ получения имен свободных COM-портов на языке Delphi, используя модуль Registry и компонент TMemo.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.