2011-12-19 26 views
6

Tôi đang tìm cách xác định xem COM có phải là COM chuẩn hay nếu nó là SPP COM, còn được gọi là bộ điều hợp bluetooth thay thế cáp cho thiết bị COM.Xác định xem cổng nối tiếp có bình thường là COM hay SPP

Tôi có một thiết bị hoạt động cả trong USB (COM -> USB) và Bluetooth và giao diện Bluetooth hoạt động với SPP.

Tôi hiện đang sử dụng System.IO.Ports.SerialPort.GetPortNames() để nhận COM.

Có cách nào để xác định xem nó có được kết nối với Bluetooth hoặc USB không?

SOLUTION:

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

Và đầu ra là một cái gì đó tương tự:

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

Xem câu trả lời của tôi tại http://stackoverflow.com/questions/2085179/ how-can-i-find-out-a-com-port-number-of-a-bluetooth-thiết bị-in-c/2096728 # 2096728 và http://stackoverflow.com/questions/6850965/how-come- getdefaultcommconfig-doesnt-work-with-bluetooth-spp-devices/6997320 # 6997320 – alanjmcf

Trả lời

6

Bạn không thể tìm thấy thông tin này ra thông qua các lớp SerialPort. Bạn sẽ cần phải làm một truy vấn WMI.

Làm một cái gì đó dọc theo dòng của điều này có thể dẫn bạn đến nó

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

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

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

} 

tôi đã không nhận được mã này nạp vì vậy tôi không biết những gì thuộc tính thêm bạn có thể có được. Tuy nhiên nếu có anyway, WMI sẽ là cách để làm điều đó.

+0

Hoàn hảo! Tôi sẽ đăng các mã tôi sử dụng và đầu ra nếu có ai khác cần nó. – jValdron

+0

Tuyệt vời để xem nó hoạt động. –

0

tôi thấy bạn nhìn vào một Bluetooth kết nối thiết bị:

Query các Win32_PnPSignedDriver và nhìn vào tài sản InfName. Giá trị phải là bthspp.inf

Tôi không thể nói chắc chắn rằng tệp inf sẽ luôn là tên này cho thiết bị bluetooth của mỗi nhà cung cấp có hỗ trợ giao thức SPP, nhưng đây là mặc định.

Lớp GUID cho COM & cổng LPT là: {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%' 
      ); 
Các vấn đề liên quan