FAQ VCL
Железо\Порты

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: MVP ::

:: RSS ::

Яндекс.Метрика

Как определить имена установленых Com-портов?

uses
  {...,} Registry;

procedure TForm1.Button1Click(Sender: TObject);
var
  reg: TRegistry;
  ts: TStrings;
  i: integer;
begin
   reg := TRegistry.Create;
   reg.RootKey := HKEY_LOCAL_MACHINE;
   reg.OpenKey( 'hardware\devicemap\serialcomm', false );
   ts := TStringList.Create;
   reg.GetValueNames( ts );
   for i := 0 to ts.Count -1 do
      Memo1.Lines.Add( reg.ReadString( ts.Strings[i] ) );
   ts.Free;
   reg.CloseKey;
   reg.free;
end;


Как определить, доступен ли COM порт?

function isComPortAvailable( Port: PChar ): boolean;
var
  DeviceName: array[0..80] of Char;
  ComFile: THandle;
begin
   StrPCopy( DeviceName, Port );

   ComFile := CreateFile( DeviceName, GENERIC_READ or GENERIC_WRITE, 0, nil,
                          OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 );
   Result := ComFile <> INVALID_HANDLE_VALUE;
   CloseHandle( ComFile );
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   if isComPortAvailable( 'COM1' ) then
      ShowMessage( 'Порт доступен' )
   else
      ShowMessage( 'Порт недоступен' );
end;

При использовании материала - ссылка на сайт обязательна