我试图编写一个程序,将COM端口信息发送到可能被拔掉的设备,并以不同的COM端口号结束。使用SetupDi,我知道可以按编号列出计算机上的所有COM端口,但考虑到数字可能会改变,我试图找到更好的方法来访问COM端口。
我使用的COM设备是FTDI串口转COM适配器,可以让我对设备模型进行编程。我希望能够根据设备型号选择COM端口。我已尝试(几乎)使用SetupDi获得的所有属性,但没有骰子。看起来设备列表SetupDi允许我访问的设备列表与设备和打印机下显示的设备(模型名称确实显示在设备列表中)之间存在差异。有没有办法以编程方式在“设备和打印机”窗口中获取设备,并使用Windows API将它们映射到COM端口?
答案 0 :(得分:1)
以下链接是一个很好的(如果不是唯一的)全面概述,介绍如何在Windows上枚举COM端口并以各种方式提取额外信息:
http://www.naughter.com/enumser.html
我们在自己的软件(Docklight)中使用的是根据enumser.cpp文件中的“UsingSetupAPI1”方式显示的内容(SetupAPI - GUID_DEVINTERFACE_COMPORT)。 UsingSetupAPI1示例演示如何如Windows设备管理器中所示提取设备名称以及COM编号。这在enumser.cpp代码中称为“friendlyNames”。
识别和与您的设备通信的另一种方法可能不是首先要求Windows,而是FTDI D2XX API:
http://www.ftdichip.com/Support/SoftwareExamples/CodeExamples.htm
当我们知道它始终是FTDI设备时,我们使用D2XX API进行通信。识别更简单,与通过“虚拟COM端口”使用Windows Communications API相比,我们具有更好的性能/更短的延迟。
如果我们需要关联COM端口号和FTDI设备ID,我们使用FTDI D2XX API的ListDevices和GetComPortNumber函数。