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

<强>作业: 我在枚举LPT时阅读了这个 SO线程使用注册表的系统的端口。我还发现COM端口在 HKEY_LOCAL_MACHINE \ HARDWARE \ DEVICEMAP \ SERIALCOMM 的注册表中列出,但在相同的线程,这在不同的机器和不同版本的Windows上可能不可靠。

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

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

有帮助吗?

解决方案

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

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

其他提示

请浏览用C ++编写的URL

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

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

这适用于所有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;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top