2011-12-19 14 views
6

Szukam sposobu, aby określić, czy COM jest standardowym COM lub jeśli jest to SPP COM, znany również jako adapter Bluetooth wymiany kabla dla urządzenia COM.Określić, czy port szeregowy jest normalny COM lub SPP

Mam urządzenie, które działa zarówno w USB (COM -> USB) i Bluetooth, a interfejs Bluetooth działa z SPP.

Obecnie używam System.IO.Ports.SerialPort.GetPortNames(), aby uzyskać COM.

Czy istnieje sposób sprawdzenia, czy jest połączony z Bluetooth lub USB?

ROZWIĄZANIE:

System.Management.ManagementObjectSearcher Searcher = new System.Management.ManagementObjectSearcher("Select * from WIN32_SerialPort"); 
foreach (System.Management.ManagementObject Port in Searcher.Get()) 
{ 
    foreach (System.Management.PropertyData Property in Port.Properties) 
    { 
     Console.WriteLine(Property.Name + " " + (Property.Value == null ? null : Property.Value.ToString())); 
    } 
} 

a wyjście jest coś podobnego:

Availability 2 
Binary True 
Capabilities 
CapabilityDescriptions 
Caption Standard Serial over Bluetooth link (COM10) 
ConfigManagerErrorCode 0 
ConfigManagerUserConfig False 
CreationClassName Win32_SerialPort 
Description Standard Serial over Bluetooth link 
DeviceID COM10 
ErrorCleared 
ErrorDescription 
InstallDate 
LastErrorCode 
MaxBaudRate 9600 
MaximumInputBufferSize 0 
MaximumOutputBufferSize 0 
MaxNumberControlled 
Name Standard Serial over Bluetooth link (COM10) 
OSAutoDiscovered True 
PNPDeviceID BTHENUM\{00001101-0000-1000-8000-00805F9B34FB}_LOCALMFG&0000\8&3062A492&0&000000000000_0000001C 
PowerManagementCapabilities System.UInt16[] 
PowerManagementSupported False 
ProtocolSupported 
ProviderType RS232 Serial Port 
SettableBaudRate True 
SettableDataBits True 
SettableFlowControl True 
SettableParity True 
SettableParityCheck False 
SettableRLSD True 
SettableStopBits True 
Status OK 
StatusInfo 3 
Supports16BitMode False 
SupportsDTRDSR True 
SupportsElapsedTimeouts True 
SupportsIntTimeouts True 
SupportsParityCheck False 
SupportsRLSD True 
SupportsRTSCTS True 
SupportsSpecialCharacters False 
SupportsXOnXOff False 
SupportsXOnXOffSet False 
SystemCreationClassName Win32_ComputerSystem 
SystemName JVALDRON-PC 
TimeOfLastReset 
+0

Zobacz moje odpowiedzi na http://stackoverflow.com/questions/2085179/ how-can-i-find-out-a-com-port-of-a-bluetooth-device-in-c/2096728 # 2096728 i http://stackoverflow.com/questions/6850965/how-come- getdefaultcommconfig-doesnt-work-with-bluetooth-spp-devices/6997320 # 6997320 – alanjmcf

Odpowiedz

6

Jesteś w stanie znaleźć tę informację za pośrednictwem klasy SerialPort. Będziesz musiał wykonać zapytanie WMI.

Uprawiając wzdłuż linii może to prowadzić do niego

ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * 
             from WIN32_SerialPort"); 

foreach(ManagementObject Port in searcher.Get()) { 

     string a = (string) Port.GetPropertyValue("Name"); 

} 

Nie mam ten kod załadowany więc nie wiem co dalej właściwości można uzyskać. Jednak gdyby tak było, WMI byłby w tym odpowiedni sposób.

+0

Idealny! Opublikuję kod, którego użyłem, i dane wyjściowe, jeśli ktoś inny tego potrzebuje. – jValdron

+0

Świetnie, że to działa. –

0

widzę szukasz w Bluetooth Podłączone urządzenie:

kwerendy Win32_PnPSignedDriver i spojrzeć na własność InfName. Wartość powinna być bthspp.inf

Nie mogę powiedzieć z całą pewnością, że plik inf będzie ZAWSZE tą nazwą dla urządzenia bluetooth każdego producenta obsługującego protokół SPP, ale jest to ustawienie domyślne.

Class GUID dla COM & porty LPT jest: {4d36e978-E325-11CE-BFC1-08002BE10318} Ref: https://msdn.microsoft.com/en-us/library/windows/hardware/ff553426

ManagementObjectSearcher Searcher = new ManagementObjectSearcher(computer + @"root\cimv2", 
       "SELECT * FROM Win32_PnPSignedDriver " 
      + "WHERE ClassGuid = '{4d36e978-e325-11ce-bfc1-08002be10318}' " 
      +  AND DeviceID LIKE 'BTHENUM%' 
      ); 
Powiązane problemy