2013-08-13 9 views
6

मुझे कंप्यूटर से जुड़े बंदरगाहों के माध्यम से पुन: प्रयास करने की आवश्यकता है, और एक विशिष्ट डिवाइस खोजें।सी # में यूएसबी डिवाइस कैसे खोजें?

enter image description here

आप एक ही विक्रेता और उत्पाद आईडी के साथ 4 डिवाइस नाम देखते हैं देख सकते हैं: कृपया नीचे दी गई छवि पर एक नजर है। लेकिन, मुझे पहले के बंदरगाह को खोजने की ज़रूरत है, जिसे नीले रंग में हाइलाइट किया गया है। ऐसा लगता है कि उनके पास एकमात्र अंतर है क्योंकि उनका मित्र नाम है (विवरण मित्र का नाम है)।

सी # नेट में इसे प्राप्त करने का सबसे आसान तरीका क्या है? मैंने इसे 'क्यूटी' में किया है और मुझे यह जानने की ज़रूरत है कि यह बनाम 2010 पेशेवर का उपयोग कर सी #, नेट फ्रेमवर्क 4 में कैसे किया जा सकता है। मैं this जैसे प्रश्नों से गुजर चुका हूं लेकिन जैसा कि आप देख सकते हैं, वे मेरी स्थिति में कोई मदद नहीं कर रहे हैं।

+0

संभव डुप्लिकेट ([कनेक्ट किए गए USB उपकरणों की सूची प्राप्त करें] http://stackoverflow.com/questions/3331043/get-list-of-connected-usb-devices) –

उत्तर

8

आप libusbdotnet का उपयोग करते हैं तो आप इस तरह कुछ करने के लिए सक्षम होना चाहिए:

public static void RetrieveUSBDevices(int vid, int pid) 
{ 
     var usbFinder = new UsbDeviceFinder(vid, pid); 
     var usbDevices = new UsbRegDeviceList(); 
     usbDevices = usbDevices.FindAll(usbFinder); 
} 

फिर आप usbDevices पुनरावृति और सही FullName के लिए जाँच करने के लिए सक्षम होना चाहिए। इसने परीक्षण नहीं किया है, हालांकि यह सैद्धांतिक है।

अद्यतन: कोशिश की और यह ठीक काम किया - समस्या क्या है? अपनी अक्षमता के कारण वोट क्यों दें?

यह भी काम करेगा:

private static void Method() 
{ 
var list = GetMyUSBDevices(); 
//Iterate list here and use Description to find exact device 
} 


private static List<UsbDevice> GetMyUSBDevices() 
{ 
    var vid = 32903; 
    var pid = 36; 

    ManagementObjectCollection collection; 
    using (var searcher = new ManagementObjectSearcher(@"Select * From Win32_USBHub")) 
     collection = searcher.Get(); 

    var usbDevice = 
     (from ManagementBaseObject device in collection 
     select new UsbDevice(
     (string) device.GetPropertyValue("DeviceID"), 
     (string) device.GetPropertyValue("Description"))).ToList(); 

    var devices = new List<UsbDevice>(); 

    foreach (var device in collection) 
    { 
     devices.Add(new UsbDevice(
     (string)device.GetPropertyValue("DeviceID"), 
     (string)device.GetPropertyValue("Description") 
     )); 
    } 

    collection.Dispose(); 

    return (from d in devices where d.DeviceId.Contains("VID_") && d.DeviceId.Contains("PID_") && d.PID.Equals(pid) && d.VID.Equals(vid) select d).ToList(); 
} 

public class UsbDevice 
{ 
    public UsbDevice(string deviceId, string description) 
    { 
     DeviceId = deviceId; 
     Description = description; 
    } 

    public string DeviceId { get; private set; } 
    public string Description { get; private set; } 

    public int VID 
    { 
     get { return int.Parse(GetIdentifierPart("VID_"), System.Globalization.NumberStyles.HexNumber); } 
    } 

    public int PID 
    { 
     get { return int.Parse(GetIdentifierPart("PID_"), System.Globalization.NumberStyles.HexNumber); } 
    } 

    private string GetIdentifierPart(string identifier) 
    { 
     var vidIndex = DeviceId.IndexOf(identifier, StringComparison.Ordinal); 
     var startingAtVid = DeviceId.Substring(vidIndex + 4); 
     return startingAtVid.Substring(0, 4); 
    } 
} 
की
+4

क्या डाउनवॉटर की विस्तृत जानकारी है? –

+0

उत्तर के लिए बहुत बहुत धन्यवाद। मैंने हमें lib का उपयोग नहीं किया है। ऐसा लगता है कि दूसरी विधि यह है कि मैं जो कुछ भी ढूंढ रहा था वह नहीं दे रहा है। मुझे मित्र का नाम नहीं मिल रहा है, क्या यह –

+0

है libusb के मामले में, क्या इसमें एक विशेष सेटअप सिस्टम है या इसे किसी भी सी # lib की तरह आसानी से उपयोग किया जा सकता है? कृपया –

संबंधित मुद्दे