2010-10-31 52 views
0

我試圖獲取可用的COM端口的列表與「視窗2000」得到實際的COM端口號 - 方法這裏解釋:
http://www.codeproject.com/KB/system/setupdi.aspx如何使用SetupDiGetDeviceRegistryProperty

我當前的代碼:http://pastebin.ca/1977670
這就是我得到:

\\?\ftdibus#vid_0403+pid_6001+ftf479xra#0000#{86e0d1e0-8089-11d0-9ce4-08003e301f73} 
USB Serial Port (COM13) 
USB Serial Port 

\\?\hdaudio#func_02&ven_11c1&dev_1040&subsys_11c10001&rev_1002#4&ddab605&0&0101#{86e0d1e0-8089-11d0-9ce4-08003e301f73} 
Agere Systems HDA Modem 
Agere Systems HDA Modem 

我通過SetupDiGetDeviceRegistryProperty的不同的選擇看,但我無法找到合適的人,以獲得實際的COM端口號。 (見http://msdn.microsoft.com/en-us/library/ff551967(VS.85).aspx

找COMXXX在友好名稱(通過正則表達式或任何..),但我不認爲這是正確的解決方案......

+0

請注意,您通常不需要或不需要COM端口號,因爲'CreateFile'工作得很好,如果給定設備接口路徑。處理傳統軟件時,您只需要COM端口號(並且鍵入起來更方便)。但請理解,編寫不接受真實設備路徑的COM端口代碼與編寫不能處理長文件名的文件I/O庫相當,並希望您提供8.3短名稱。 – 2014-12-12 16:07:49

+0

我用它來顯示下拉列表,供用戶選擇將在應用程序中使用的COM端口之一,而不是實際使用COM端口。 – Strayer 2014-12-19 10:09:55

+0

然後只需使用友好名稱。沒有必要從中提取COM端口號,其他信息(是USB?藍牙?)通常比數字更有價值,所以您*不應該*提取COM端口號。 – 2014-12-19 15:10:17

回答

1

你可以使用SetupDiOpenDevRegKey打開設備的註冊表並查詢「PortName」值;這會讓你回到「COM4」之類的東西。還有幾個ways to query COM ports

+0

謝謝!我想我會試着用SetupDiOpenDevRegKey作爲練習來完成我的功能......你提到的庫看起來對於我正在努力完成的任務非常棒。 – Strayer 2010-11-01 11:31:11