我有一些遗留代码,通过调用提供 PC 上可用 COM 端口的列表EnumPorts()函数,然后过滤以“COM”开头的端口名称。
出于测试目的,如果我可以将此代码与类似的东西一起使用,那将非常有用com0com,它提供了成对的虚拟 COM 端口,它们作为空调制解调器循环在一起。
但是 com0com 端口未被找到EnumPorts()
功能(即使没有过滤“COM”)。超级终端和 SysInternals PortMon 都可以看到它们,所以我确信它安装正确。
那么是否还有其他一些 Win32 函数可以提供可用串行端口的明确列表?
The 枚举串行端口 v1.20Nick D 使用建议nine列出串行端口的不同方法!我们当然不缺少选择,尽管结果似乎有所不同。
为了省去其他人的麻烦,我将在这里列出它们并表明他们成功地找到了com0com
我的 PC (XP Pro SP2) 上的端口:
创建文件(“COM”+1->255)正如韦尔·达卢尔所建议的
✔ 找到 com0com 端口,花费了 234 毫秒。
查询DosDevice()
✔ 找到 com0com 端口,花费了 0 毫秒。
GetDefaultCommConfig("COM" + 1->255)
✔ 找到 com0com 端口,花费了 235 毫秒。
“SetupAPI1”使用对 SETUPAPI.DLL 的调用
✔ 找到 com0com 端口,还报告“友好名称”,花费了 15 毫秒。
“SetupAPI2”使用对 SETUPAPI.DLL 的调用
✘ 未找到 com0com 端口,报告“友好名称”,耗时 32 毫秒。
枚举端口()
✘ 报告一些非COM端口,没有找到com0com端口,花了15ms。
使用 WMI 调用
✔ 找到 com0com 端口,还报告“友好名称”,花费了 47 毫秒。
使用 MSPORTS.DLL 调用的 COM 数据库
✔/✘ 报告了一些非 COM 端口,找到了 com0com 端口,花费了 16 毫秒。
迭代注册表项 HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
✔ 找到 com0com 端口,花费了 0 毫秒。这显然是什么系统内部端口Mon uses.
基于这些结果,我认为 WMI 方法可能最适合我的要求,因为它相对较快,而且它还提供了友好的名称(例如“通信端口 (COM1)”、“com0com - 串行端口模拟器”)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)