1

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

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

我还找到了引用使用 QueryDosDevice() 的文章,但在尝试此示例代码时,我发现它似乎根本没有列出任何 COM 端口。

问题:列出 Windows 机器上的 COM 端口最可靠的方法是什么(跨越未知的 Windows 版本)?

4

3 回答 3

1

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

如果您需要运行时可靠性,请使用此方法。

于 2009-03-05T01:14:28.583 回答
1

请通过用 C++ 编写的 URL

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

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

这适用于所有 Windows 版本,因为这适用于适用于所有 Windows 版本的设备管理器的原理。

于 2009-03-05T12:18:48.003 回答
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;
于 2009-03-05T11:50:08.150 回答