2010-03-26 10 views
6

Aby uzyskać wszystkie dostępne numery seryjne z systemu, używam następującego polecenia.Otrzymywanie błędnych nazw portów szeregowych z urządzenia bluetoothdevice (C#)

SerialPort.GetPortNames 

Działa dobrze dla portu szeregowego płyty głównej, ale z urządzeniem bluetooth otrzymuję złe nazwy portów.

Na przykład: Zamiast COM7 otrzymuję czasami COM70 lub COM7. To zawsze 1 litera za dużo.

jakieś sugestie?

PS: Używam najnowszego programu Visual Studio Express w systemie Windows 7 PPS: brudny hack do wycięcia ostatniej litery nie działa, ponieważ nie wiem, który to port szeregowy bluetooth (z różnymi urządzeniami bluetoothstick lub urządzeniami zmienia numer komportu) i po wypróbowaniu różnych patyków osiągnąłem COM10, ergo COM100 lub COM10f

EDYCJA: kod, którego używam właśnie teraz. czytanie regestry, ale wciąż ten sam problem.

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); 
     } 
    } 
} 

Zwykle drugi lub trzeci żądania pracy z wynikiem podobnego

COM11ᯋ < COM10S < COM11 < COM10 < COM11 < COM10 <

h ow to może być?

Odpowiedz

0

Możesz użyć WMI do sprawdzenia systemu pod kątem portów szeregowych, w tym tych, które są dodawane przez urządzenia Bluetooth i urządzenia USB-To-Serial. Może w ten sposób nie spotkasz się z tym problemem. Zobacz pod adresem CodeProject.

+0

nie działa w moim środowisku. System.Managment nie został znaleziony. Może to nie jest część edycji ekspresowej? – wurlog

2

Zostało reported as a bug z non-NUL strun:

można ręcznie chodzić rejestru?

HKLM\Hardware\DeviceMap\SerialComm 
+0

Otrzymuję wartości z rejestru, ale nawet tam jest tylko na Comport podłączony przez bluetooth rejestru pokazuje 2 Comports. Czy masz pojęcie, dlaczego tak się dzieje? – wurlog

+0

Wciąż ten sam problem :(ale zwykle trzecia próba jest właściwa. Jak to możliwe? – wurlog

0

Mam ten sam problem. SerialPort.GetPortNames zasadniczo używa rejestru - obie te metody nie działają z bluetooth.

Obejście, którego obecnie używam, polega na przechodzeniu przez pierwsze porty X com i sprawdzaniu, czy istnieją, co nie jest eleganckie. MS: FAIL.

Powiązane problemy