Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.06;
Скачать: CL | DM;

Вниз

Список comm портов   Найти похожие ветки 

 
pavel_guzhanov ©   (2004-05-05 10:13) [0]

Народ, подскажите, как определить список ком портов, доступных в системе, например заполнить номерами доступных портов комбобокс?


 
Jack128 ©   (2004-05-05 10:28) [1]

var
 Reg : TRegistry;
 Names : TStrings;
 i : integer;
begin
reg := TRegistry.Create(KEY_READ);
Names := TStringList.Create;
try
 reg.RootKey := HKey_Local_Machine;
 if reg.OpenKeyReadOnly("HARDWARE\DEVICEMAP\SerialComm") then begin
   Reg.GetValueNames(Names);
   for i := 0 to Names.Count - 1 do
    cbCommPort.Items.Add(reg.ReadString(Names[i]));
 end;
finally
 Names.Free;
 Reg.Free;
end;
end;


 
y-soft ©   (2004-05-05 20:36) [2]

Доступных - это в смысле незанятых каким-либо приложением?
Или вообще присутствующих в системе?

Можно вот так:

procedure EnumComPorts(Strings : TStrings; AvailableOnly : boolean);
var
 MaxPorts      : integer;
 hPort         : THandle;
 PortNumber    : integer;
 PortName      : string;
 LastErr : DWORD;
begin
 Strings.Clear;

 case Win32PlatForm of
   VER_PLATFORM_WIN32_NT: MaxPorts := 256;
   VER_PLATFORM_WIN32_WINDOWS: MaxPorts := 50;
 end;

 for PortNumber := 1 to MaxPorts do
 begin
   if PortNumber > 9 then
     PortName := "\\.\COM" + IntToStr( PortNumber ) // ask Microsoft why...
   else
     PortName := "COM" + IntToStr( PortNumber );

   hPort := CreateFile( PChar( PortName ),
     GENERIC_READ or GENERIC_WRITE,
     0,
     nil,
     OPEN_EXISTING,
     0,
     0 );

   LastErr := GetLastError;
   if not (hPort = INVALID_HANDLE_VALUE) or
     (not AvailableOnly and (LastErr = ERROR_ACCESS_DENIED))then
   begin
     {if LastErr = ERROR_ACCESS_DENIED then
       PortName := PortName + " (already in use)";}
     Strings.Add( PortName );
   end;
   CloseHandle(hPort);
 end;
end;



Страницы: 1 вся ветка

Текущий архив: 2004.06.06;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.024 c
1-1085391551
ПсихЪ_клон
2004-05-24 13:39
2004.06.06
Аналоги C++ нутых << и >> в Delphi


4-1083497908
anod
2004-05-02 15:38
2004.06.06
Изменить позицию пункта меню


3-1084763354
ss300
2004-05-17 07:09
2004.06.06
Trigger


14-1085123823
Layner
2004-05-21 11:17
2004.06.06
Кто что может сказать по огнетушителям?


14-1084968224
WebErr
2004-05-19 16:03
2004.06.06
Не запускается 3DMark 2001