2010-03-26 59 views
6

要從系統獲取所有可用的串行端口,請使用以下命令。從藍牙設備(c#)獲取錯誤的串行端口名稱

SerialPort.GetPortNames 

它工作正常的主板串行端口,但與藍牙設備我得到錯誤的端口名稱。

例如:我有時會使用COM70或COM7ö,而不是COM7。它總是1封信。

有什麼建議嗎?我在Windows 7中使用最新的Visual Studio ExpressPPS:削減最後一個字母的骯髒的黑客沒有工作,因爲我不知道哪一個是藍牙串行端口(使用各種藍牙或設備它改變comport的數量),並嘗試各種棒後,我到達COM10,ergo COM100或COM10f

編輯:我現在使用的代碼。閱讀記錄,但仍然是同樣的問題。

RegistryKey myRegistry = Registry.LocalMachine.OpenSubKey("Hardware\\DeviceMap\\SerialComm"); 
foreach (string valuename in myRegistry.GetValueNames()) 
{ 
    if (myRegistry.GetValue(valuename) is String) 
    { 
     if (valuename.Contains("BthModem")) 
     { 
      richTextBox1.AppendText(">" + myRegistry.GetValue(valuename) + "<" + Environment.NewLine); 
     } 
    } 
} 

通常,第二或第三請求正在與像

COM11ᯋ< COM10S結果< COM11 < COM10 < COM11 < COM10 <

ħ那可以嗎?

回答

0

您可以利用WMI向系統查詢串行端口,包括由藍牙設備和USB至串行設備添加的端口。也許這樣你就不會遇到這個問題。請參閱CodeProject

+0

在我的環境中不起作用。 System.Managment找不到。也許它不是快遞版的一部分? – wurlog 2010-04-02 13:20:02

2

這已經reported as a bug與非空終止字符串:

你能手動走註冊表?

HKLM\Hardware\DeviceMap\SerialComm 
+0

我從註冊表中獲取值,但即使只有通過藍牙連接的Comport,註冊表才顯示2個Comports。你有什麼想法爲什麼發生這種情況? – wurlog 2010-04-02 13:21:04

+0

同樣的問題:(但通常第三次嘗試是正確的,這怎麼可能? – wurlog 2010-04-02 13:27:16

0

我有同樣的問題。無論如何,SerialPort.GetPortNames基本上都使用註冊表 - 這兩種方法似乎都不適用於藍牙。

我目前使用的解決方法是循環遍歷第一個X com端口,看看它們是否存在,這幾乎沒有優雅。 MS:失敗。