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

4

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

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

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

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

2个回答

6
如果您使用可以读取注册表的编程语言/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可以自行检查您感兴趣的部分。但这应该为您提供所需的所有信息。


我一直在Stack Overflow上搜索获取这个信息的方法,看了好几十个问题......以及至少同样数量的回答,但到目前为止,这是唯一一个直截了当的答案。非常感谢你,你帮助我解决了一个问题! - Geeky Guy
我使用 'hardware\devicemap\serialcomm',在键名中有一个提示是什么类型的设备,例如 \Device\BthModem0 是蓝牙设备,而 \Device\USBSER000 是 USB 设备。 - Codebeat

0

我在我的串口列表中看到了完全相同的东西(在设备管理器中被保留):

ACPI\PNP0501

而我能够看到它的唯一途径是使用这个好用的工具:

COM Name Arbiter Tool(V1.0.5)

如果你想开始使用它,那么你真正应该做的第一件事选择

选项 -> 显示设备ID”以便首先从程序中获得一些实际的用处。

我甚至不确定为什么一开始它没有被选中,因为现在我永远不会知道那个占用串口的0501设备到底是什么了,哈哈...

我还建议不要点击“清除未使用的保留项”,因为它“清除”了0个保留项,现在设备管理器中就没有任何“串口保留”文本了 -

所以你基本上只能点击“删除非现有设备”来解决你的问题(尽管你应该先使用前面提到的“显示设备ID”选项来检查哪个设备正在保留该端口...)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接