如何在Windows中获取有关串行(COM)端口的特定信息?

如何在Windows中获取有关串行(COM)端口的特定信息?,windows,delphi,bluetooth,serial-port,Windows,Delphi,Bluetooth,Serial Port,由于我安装了几十个虚拟串行(COM)端口,其中一半是蓝牙设备,我想知道哪个端口属于哪个设备,它是直接连接还是通过蓝牙连接 因此,我对所有串行端口的琐碎枚举不感兴趣,它只会显示一个“COM”列表+相应的数字,但会显示该设备的真实名称,可能还有它的设备ID(其中可以找到有关该设备是通过USB还是蓝牙连接的信息) 虽然我可以通过WMI获取这些信息,但与此方法相关的问题很多。特别是速度非常慢,但它只列出连接的设备(蓝牙设备除外,这些设备可能已连接,并且无论实际连接如何都会显示) 我更喜欢用Delphi/

由于我安装了几十个虚拟串行(COM)端口,其中一半是蓝牙设备,我想知道哪个端口属于哪个设备,它是直接连接还是通过蓝牙连接

因此,我对所有串行端口的琐碎枚举不感兴趣,它只会显示一个“COM”列表+相应的数字,但会显示该设备的真实名称,可能还有它的设备ID(其中可以找到有关该设备是通过USB还是蓝牙连接的信息)

虽然我可以通过WMI获取这些信息,但与此方法相关的问题很多。特别是速度非常慢,但它只列出连接的设备(蓝牙设备除外,这些设备可能已连接,并且无论实际连接如何都会显示)


我更喜欢用Delphi/Object Pascal编写的解决方案,但任何其他语言对我来说都可以(WMI访问代码是从C#复制的)。

如果使用可以读取注册表的编程语言/API,请检查子树
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum

这有包含设备类型、设备类、实例ID的子项。每个实例ID都有一个子项
device Parameters\PortName
,该子项具有COM名称

例如,在我的系统上

ACPI\PNP0501\1\Device Parameters\PortName = COM1
BTHENUM\{GUID}{ID}\Device Parameters\PortName = COM4
例如,ID部分中的键具有附加信息

ACPI\PNP0501\1\FriendlyName = Kommunikationsanschluss (COM1)  (german windows)
ACPI\PNP0501\1\Service = Serial
BTHENUM\{GUID}{ID}\Service = BTHMODEM

使用regedit检查您感兴趣的部分。但这应该会提供您所需的所有信息。

我一直在上下爬行,寻找获取这些信息的方法。看到了几十个问题……以及至少同样多的答案,这是迄今为止唯一一个直截了当的答案。非常感谢您,您帮助我解决了一个公关问题问题!我使用了“hardware\devicemap\serialcomm”,并且在密钥名中有一个提示,它是什么类型的设备,例如蓝牙设备的\device\BthModem0和USB设备的\device\USBSER000。