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

km0tfn4u  于 2023-06-29  发布在  Windows
关注(0)|答案(2)|浏览(251)

由于我安装了几十个虚拟串行(COM)端口,其中一半是蓝牙设备,我想知道哪个端口属于哪个设备,以及它是直接连接还是通过蓝牙连接。
因此,特别是我不感兴趣的所有串行端口的琐碎枚举,这只会揭示'COM'的列表+相应的数字,但该设备的真实的名称,可能是其设备ID(在那里可以找到有关这是否是通过USB或蓝牙连接的信息。
虽然我可以通过WMI获得这些信息,但有很多问题与此方法有关。特别是它的血腥缓慢,但它也只列出连接的设备(除了蓝牙设备,可以潜在地连接,并显示不管一个真实的的连接)
我更喜欢用 Delphi / Object Pascal编写的解决方案,但任何其他语言对我来说也很好(WMI访问代码是从C#复制的)。

k0pti3hp

k0pti3hp1#

如果您使用可以读取注册表的编程语言/API,请检查子树HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum
它具有包含设备类型、设备类和示例ID的子键。每个示例ID都有一个包含COM名称的子项Device Parameters\PortName
比如在我的系统上

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自己检查哪些部分是您感兴趣的。但这应该能给予你所有你需要的信息。

oknwwptz

oknwwptz2#

我在我的com端口列表中有同样的内容(在设备管理器中保留):
ACPI\PNP0501
而我唯一能看到的方法就是使用这个不错的工具:

COM名称仲裁工具(V1.0.5)

如果你想开始使用它,那么第一件事你真正应该做的是选择
选项->显示设备ID”,以获得一些实际的实用性的程序摆在首位。
我甚至不知道为什么它不打勾摆在首位,因为现在我永远不会知道0501设备是什么是保留com端口的所有时间,哈哈…
我还建议点击“清除未使用的保留”,因为它“清除”了其中0个,现在我没有任何“com端口保留”文本在设备管理器-
所以你基本上只能点击“删除非现有设备”来解决你的问题(虽然你应该首先检查什么设备正在保留端口与“显示设备id”选项之前提到的...)

相关问题