2011-12-19 14 views
6

मैं यह निर्धारित करने का एक तरीका ढूंढ रहा हूं कि COM एक मानक COM है या यदि यह एक एसपीपी COM है, जिसे COM डिवाइस के लिए केबल प्रतिस्थापन ब्लूटूथ एडाप्टर भी कहा जाता है।निर्धारित करें कि सीरियल पोर्ट सामान्य है या एसपीपी

मेरे पास एक डिवाइस है जो यूएसबी (COM -> यूएसबी) और ब्लूटूथ दोनों में काम करता है, और ब्लूटूथ इंटरफेस एसपीपी के साथ काम करता है।

मैं वर्तमान में COM प्राप्त करने के लिए System.IO.Ports.SerialPort.GetPortNames() का उपयोग कर रहा हूं।

क्या यह निर्धारित करने का कोई तरीका है कि यह ब्लूटूथ या यूएसबी से जुड़ा हुआ है या नहीं?

समाधान:

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

और उत्पादन होता है कुछ इसी तरह:

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

अपने जवाब http://stackoverflow.com/questions/2085179/ पर देखें कैसे-कर-आई-खोज-आउट-ए-कॉम-पोर्ट-संख्या-ए-ब्लूटूथ-डिवाइस-इन-सी/2096728 # 2096728 और http://stackoverflow.com/questions/6850965/how-come- getdefaultcommconfig-doesnt-work-with-bluetooth-spp-devices/6997320 # 6997320 – alanjmcf

उत्तर

6

आप serialport वर्ग के माध्यम से इस जानकारी को खोजने में असमर्थ हैं। आपको डब्लूएमआई क्वेरी करने की आवश्यकता होगी।

इस की तर्ज पर कुछ करने से आपको यह

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

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

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

} 

मैं इस कोड से भरी हुई तो मैं नहीं जानता कि आप क्या आगे गुण प्राप्त कर सकते हैं नहीं मिला है हो सकता है। हालांकि अगर वैसे भी था, तो डब्लूएमआई ऐसा करने का तरीका होगा।

+0

बिल्कुल सही! मैं जो कोड इस्तेमाल करता हूं उसे पोस्ट करूंगा और आउटपुट अगर किसी और को इसकी ज़रूरत है। – jValdron

+0

यह देखने के लिए बढ़िया काम करता है। –

0

मैं अपने एक ब्लूटूथ को देख देख डिवाइस कनेक्ट:

क्वेरी Win32_PnPSignedDriver और InfName संपत्ति को देखो। मान bthspp.inf

मैं निश्चित रूप से यह नहीं कह सकता कि inf फ़ाइल हमेशा प्रत्येक विक्रेता के ब्लूटूथ डिवाइस के लिए यह नाम होगा जो एसपीपी प्रोटोकॉल का समर्थन करता है, लेकिन यह डिफ़ॉल्ट है।

कक्षा GUID कॉम के लिए & एलपीटी बंदरगाहों है: {4d36e978-e325-11ce-bfc1-08002be10318} रेफरी: 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%' 
      ); 
संबंधित मुद्दे