Форум: "WinAPI";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
ВнизСписок 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.032 c