Поиск COM портов

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Нужно найти COM порты и вывести их в список или выпадающий список, для дальнейшей работы с ними.

Для этого подходит ниже следующий код

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls;
	
type
. . .
cbComPort: TComboBox;
. . .

procedure FindComPorts();
var
  i: integer;
  FHandl:THandle;
  DeviceName: array[0..127] of Char;
  sCom: string;
begin {опрос существующих портов}
  for i := 0 to 31 do {цикл опроса}
  begin {пробуем получить дескриптор порта}
    sCom := 'COM' + IntToStr(i + 1);
    StrPCopy(DeviceName, sCom+':');
    FHandl := CreateFile(DeviceName,
      GENERIC_READ or GENERIC_WRITE,
      FILE_SHARE_READ,      //0,
      nil,
      OPEN_EXISTING,
      FILE_ATTRIBUTE_NORMAL,     
      0);
    if FHandl <> INVALID_HANDLE_VALUE then
    begin {если порт есть то добавить в список}
      cbComPort.Items.Add(sCom);
    end;
    CloseHandle(FHandl); {закрыть дескриптор}
  end; // for
end;

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *