Перечисление списка системных Com-портов в Delphi
-
03-07-2019 - |
Вопрос
Цель: Я хотел бы иметь возможность перечислить доступные COM-порты в системе на Delphi.
Домашнее задание:
Я читал это ИТАК, продолжайте перечислять LPT-порты системы, используя реестр.Я также обнаружил, что COM-порты перечислены в реестре по адресу HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
но обнаружил безответную жестикуляцию в тот же поток что это может быть ненадежно на разных компьютерах и в разных версиях Windows.
Я также нашел статьи, ссылающиеся на использование QueryDosDevice(), но после попытки этот пример кода, я обнаружил, что в нем вообще не было списка каких-либо COM-портов.
Вопрос: Какой наиболее надежный способ (для неизвестных версий Windows) перечислить COM-порты на компьютере с Windows?
Решение
КАРТА УСТРОЙСТВА\SERIALCOMM подходит для всех версий NT.Вероятно, вам нужно будет поискать Win9x в разделе DYN_DATA.
Использование этот метод если вам нужна надежность во время выполнения.
Другие советы
Пожалуйста, перейдите по URL, который написан на C ++
http://www.codeproject.com/KB/system/serial_portsenum_fifo.aspx
и такой же подход может быть реализован и в delphi..или кто-нибудь может перевести вас в SO..
Это будет работать для всех версий Windows, поскольку это работает по принципу диспетчера устройств, который доступен для всех версий Windows.
Это код для LINUX, а не для WINDOWS....
function GetSerialPortNames: string;
var
Index: Integer;
Data: string;
TmpPorts: String;
sr : TSearchRec;
begin
try
TmpPorts := '';
if FindFirst('/dev/ttyS*', $FFFFFFFF, sr) = 0 then
begin
repeat
if (sr.Attr and $FFFFFFFF) = Sr.Attr then
begin
data := sr.Name;
index := length(data);
while (index > 1) and (data[index] <> '/') do
index := index - 1;
TmpPorts := TmpPorts + ' ' + copy(data, 1, index + 1);
end;
until FindNext(sr) <> 0;
end;
FindClose(sr);
finally
Result:=TmpPorts;
end;
end;