2013-11-27 26 views
0

我正在嘗試編寫一個程序,該程序可以將COM端口信息發送到可能被拔出並以不同的COM端口號結束的設備。使用SetupDi,我知道可以通過編號列出計算機上的所有COM端口,但考慮到編號可能會改變,我試圖找到更好的方式來訪問COM端口。在C++/Win7中訪問COM設備名稱

我正在使用的COM設備是FTDI串口轉COM適配器,可以讓我編程設備型號。我很樂意能夠根據設備型號選擇一個COM端口。我試過(幾乎)所有可以使用SetupDi的屬性,但沒有使用骰子。看起來像SetupDi允許我訪問的設備列表和出現在「設備和打印機」下的設備(型號名稱顯示)之間存在差異。有沒有辦法以編程方式在設備和打印機窗口中獲取設備,並使用Windows API將它們映射到COM端口?

回答

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

我們用於通信的D2XX API時,我們知道這是總是一個FTDI設備。識別更簡單,並且我們比通過「虛擬COM端口」使用Windows Communications API具有更好的性能/更少的延遲。

如果我們需要關聯COM端口號和FTDI設備ID,我們使用FTDI D2XX API的ListDevices和GetComPortNumber函數。