目标:我希望能够在Delphi的系统中列出可用的COM端口。
作业:
我已经阅读this SO线程,使用注册表枚举系统的LPT端口。我还发现COM端口在HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
的注册表中列出,但在same thread中发现未答复的手势,这在不同的机器和不同版本的Windows上可能不可靠。
我还发现引用QueryDosDevice()的文章,但在尝试this sample code时,我发现它似乎根本没有列出任何COM端口。
问题:在Windows计算机上列出COM端口的最可靠方式(跨未知Windows版本)是什么?
答案 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;