枚举Delphi中的系统Com端口列表

时间:2009-03-05 00:41:59

标签: delphi winapi registry serial-port

目标:我希望能够在Delphi的系统中列出可用的COM端口。

作业: 我已经阅读this SO线程,使用注册表枚举系统的LPT端口。我还发现COM端口在HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM的注册表中列出,但在same thread中发现未答复的手势,这在不同的机器和不同版本的Windows上可能不可靠。

我还发现引用QueryDosDevice()的文章,但在尝试this sample code时,我发现它似乎根本没有列出任何COM端口。

问题:在Windows计算机上列出COM端口的最可靠方式(跨未知Windows版本)是什么?

3 个答案:

答案 0 :(得分:1)

DEVICEMAP\SERIALCOMM适用于所有NT版本。您可能需要在DYN_DATA下查找Win9x。

如果您需要运行时可靠性,请使用this method

答案 1 :(得分:1)

请浏览用C ++编写的URL

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

同样的方法也可以在delphi中实现..或者有人可以在SO中为你转换..

这适用于所有Windows版本,因为它的工作原理是设备管理器,可用于所有窗口版本。

答案 2 :(得分:0)

这是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;