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

标签 windows delphi bluetooth serial-port

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

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

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

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

最佳答案

如果您使用可以读取注册表的编程语言/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部分的key有额外的信息,例如

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

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

关于windows - 如何在 Windows 中获取有关串行 (COM) 端口的特定信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21367189/

相关文章:

Python - Windows 关机事件

multithreading - 直接从线程向对象发送消息,而不使用主窗体

Android 要求用户为我的应用程序启用已在 list 中请求的权限

C++ DirectX11 窗口颜色不变

java - ProcessBuilder 向命令行添加额外的引号

windows - 是否可以通过 ssh 进入 Windows(通过 cygwin sshd)并在登录的 Windows 用户桌面上启动程序?

windows - 在delphi中逆向加密

delphi - 如何使用 Delphi 中的当前区域设置格式化整数

java - 如何在android中以编程方式使用HFP-bluetooth连接到远程电话

android - 蓝牙:程序卡在 connect() 方法