Перечисление списка систем Com-портов в Delphi - PullRequest
1 голос
/ 05 марта 2009

Цель: Я хотел бы иметь возможность перечислить доступные COM-порты в системе в Delphi.

Домашнее задание: Я прочитал этот SO поток при перечислении портов LPT системы, использующей реестр. Я также обнаружил, что COM-порты перечислены в реестре на HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM, но обнаружил безответную жестикуляцию в том же потоке , что это может быть ненадежным на разных машинах и разных версиях Windows.

Я также нашел статьи, ссылающиеся на использование QueryDosDevice (), но, попробовав этот пример кода , я обнаружил, что он вообще не отображает никаких COM-портов.

Вопрос: Каков самый надежный (среди неизвестных версий Windows) список COM-портов на компьютере Windows?

Ответы [ 3 ]

1 голос
/ 05 марта 2009

Пожалуйста, просмотрите URL, который написан на C ++

http://www.codeproject.com/KB/system/serial_portsenum_fifo.aspx

и тот же подход может быть реализован и в Delphi .. или кто-то может преобразовать для вас в SO ..

Это будет работать для всех версий Windows, поскольку это работает по принципу диспетчера устройств, который доступен для всех версий Windows.

1 голос
/ 05 марта 2009

DEVICEMAP \ SERIALCOMM подходит для всех версий NT. Вы, вероятно, должны искать в DYN_DATA для Win9x.

Используйте этот метод , если вам нужна надежность во время выполнения.

0 голосов
/ 05 марта 2009

Это код для 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...