दिलचस्प पोस्ट
अजगर नियमित अभिव्यक्ति पूरे शब्द का मिलान करते हैं जावा में पदोन्नति? XmlSerializer समर्थन शब्दकोश क्यों नहीं है? एपीके की स्वचालित स्थापना Sys.stdout.flush () विधि का उपयोग एएसपी.नेट वेबसाइट को एएसपी.नेट वेब अनुप्रयोग में बदलने के लिए कैसे करें Async नेटवर्क ऑपरेशन कभी समाप्त नहीं साधारण PHP स्ट्रॉप्स फ़ंक्शंस काम नहीं करते, क्यों? जावास्क्रिप्ट फ़ंक्शन को कॉल करने में देरी कैसे करें? दृश्य स्टूडियो (2008) में कोई अन्य कस्टम फ़ाइल पर एक कस्टम निर्भर फाइल करने का एक तरीका है? एंड्रॉइड – कैसे नेविगेशन ड्रॉवर में टुकड़े को बदलने के लिए कीस्टोर प्रमाण पत्र के SHA-1 फिंगरप्रिंट डीबग संस्करण का libc का उपयोग कैसे करें JSP के लिए कक्षा संकलित करने में असमर्थ: प्रकार java.util.Map $ Entry का समाधान नहीं किया जा सकता। यह अप्रत्यक्ष रूप से आवश्यक वर्ग वर्गों से संदर्भित है छवि टैग के नीचे रहस्य सफेद स्थान

कनेक्टेड यूएसबी डिवाइसेस की सूची प्राप्त करें

मैं विंडोज कंप्यूटर पर सभी जुड़े यूएसबी उपकरणों की एक सूची कैसे प्राप्त करूं?

Solutions Collecting From Web of "कनेक्टेड यूएसबी डिवाइसेस की सूची प्राप्त करें"

सिस्टम के लिए संदर्भ जोड़ें। अपने प्रोजेक्ट के लिए प्रबंधन, फिर कुछ ऐसा प्रयास करें:

namespace ConsoleApplication1 { using System; using System.Collections.Generic; using System.Management; // need to add System.Management to your project references. class Program { static void Main(string[] args) { var usbDevices = GetUSBDevices(); foreach (var usbDevice in usbDevices) { Console.WriteLine("Device ID: {0}, PNP Device ID: {1}, Description: {2}", usbDevice.DeviceID, usbDevice.PnpDeviceID, usbDevice.Description); } Console.Read(); } static List<USBDeviceInfo> GetUSBDevices() { List<USBDeviceInfo> devices = new List<USBDeviceInfo>(); ManagementObjectCollection collection; using (var searcher = new ManagementObjectSearcher(@"Select * From Win32_USBHub")) collection = searcher.Get(); foreach (var device in collection) { devices.Add(new USBDeviceInfo( (string)device.GetPropertyValue("DeviceID"), (string)device.GetPropertyValue("PNPDeviceID"), (string)device.GetPropertyValue("Description") )); } collection.Dispose(); return devices; } } class USBDeviceInfo { public USBDeviceInfo(string deviceID, string pnpDeviceID, string description) { this.DeviceID = deviceID; this.PnpDeviceID = pnpDeviceID; this.Description = description; } public string DeviceID { get; private set; } public string PnpDeviceID { get; private set; } public string Description { get; private set; } } } 

मुझे पता है कि मैं एक पुराने प्रश्न का जवाब दे रहा हूं, लेकिन मैं इस अभ्यास के माध्यम से ही गया और थोड़ा अधिक जानकारी पाई, मुझे लगता है कि चर्चा में बहुत योगदान देगा और जो कोई इस प्रश्न को पाता है उसे देखकर और मदद करता है मौजूदा उत्तर कम हो जाते हैं

स्वीकृत जवाब करीब है, और इसे नेडको की टिप्पणी का उपयोग करके ठीक किया जा सकता है। शामिल WMI कक्षाओं की एक अधिक विस्तृत समझ चित्र को पूरा करने में मदद करता है।

Win32_USBHub केवल यूएसबी Win32_USBHub देता है यह मस्तिष्क में स्पष्ट लगता है लेकिन इसके बाद के विचार इस बात को याद करते हैं। इसमें सभी संभव यूएसबी डिवाइस शामिल नहीं हैं, केवल उन (जो सिद्धांत में, कम से कम) अतिरिक्त उपकरणों के लिए केंद्र के रूप में कार्य कर सकते हैं। यह कुछ उपकरणों को याद नहीं करता है जो केंद्र नहीं हैं (खासकर समग्र उपकरणों के भागों)।

Win32_PnPEntity में सभी USB डिवाइस शामिल हैं, और सैकड़ों गैर-यूएसबी डिवाइस शामिल हैं। सूची फ़िल्टर करने के लिए "यूएसबी%" के साथ एक DeviceID के लिए WHERE क्लॉज खोज Win32_PnPEntity का उपयोग करने के लिए रसेल गेंटमैन की सलाह उपयोगी है लेकिन थोड़ा अधूरा है; यह HID-compliant चूहों और कीबोर्ड को याद करता है मेरा मानना ​​है कि "USB \%", "USBSTOR \%", "USBPRINT \%", और "छिपाई \%" पूरी तरह से सभी संभावनाओं को दर्शाता है, लेकिन जब से बेहतर विकल्प होते हैं, तो यह संभवतः पीछा करने के लिए आवश्यक नहीं है। हालांकि, Win32_PnPEntity , Win32_PnPEntity को देखने के लिए एक अच्छा "मास्टर" संदर्भ है, एक बार जब आप अन्य स्रोतों से PNPDeviceID के कब्जे में होते हैं

मैंने जो पाया वह यूएसबी उपकरणों को एन्यूमरेट करने का सबसे अच्छा तरीका था Win32_USBControllerDevice को क्वेरी Win32_USBControllerDevice । हालांकि यह डिवाइस के लिए विस्तृत जानकारी नहीं दे रहा है, लेकिन यह पूरी तरह से आपके यूएसबी उपकरणों की गणना करता है और आपको प्रत्येक USB डिवाइस (हब, गैर-हब डिवाइस, और एचआईडी-अनुपालन उपकरणों सहित) के लिए PNPDeviceID की एक पूर्ववर्ती / निर्भर जोड़ी देता है आपकी प्रणाली। क्वेरी से प्रत्येक आश्रित लौट आएगा एक यूएसबी डिवाइस होगा पूर्वनिर्धारित यह नियंत्रक होगा, जो कि Win32_USBController से पूछताछ के द्वारा लौटाए गए यूएसबी नियंत्रकों में से एक है।

एक बोनस के रूप में, यह प्रतीत होता है कि हुड के तहत, WMI ने Win32_USBControllerDevice क्वेरी का जवाब देते समय डिवाइस ट्री पर चलता है, इसलिए जिस क्रम में ये परिणाम लौटाए जाते हैं वह माता-पिता / बच्चे के रिश्तों को पहचानने में मदद कर सकते हैं। (यह दस्तावेज नहीं है और इस प्रकार केवल एक अनुमान है; निश्चित परिणाम के लिए SetupDi API के CM_Get_Parent (या Child + Sibling ) का उपयोग करें।) SetupDi API के लिए एक विकल्प के रूप में, ऐसा लगता है कि Win32_USBHub अंतर्गत सूचीबद्ध सभी उपकरणों के लिए उन्हें देखा जा सकता है रजिस्ट्री में ( HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ + PNPDeviceID ) और उसके पास एक पैरामीटर ParentIdPrefix होगा जो अपने बच्चों के PNPDeviceID में अंतिम फ़ील्ड का उपसर्ग होगा, इसलिए यह एक वाइल्डकार्ड मैच में भी इस्तेमाल किया जा सकता है Win32_PnPEntity क्वेरी को फ़िल्टर करें

मेरे आवेदन में, मैंने निम्नलिखित किया:

  • (वैकल्पिक) Win32_PnPEntity और परिणामों को बाद में पुनर्प्राप्ति के लिए कुंजी-मान मैप में (कुंजी के रूप में PNPDeviceID के साथ) संग्रहीत किया। यह वैकल्पिक है अगर आप व्यक्तिगत प्रश्नों को बाद में करना चाहते हैं
  • मेरे सिस्टम (सभी निर्भर) पर यूएसबी डिवाइसों की एक निश्चित सूची के लिए पूछे गए Win32_USBControllerDevice और इनमें से PNPDeviceIDs को निकाला। रूट हब (डिवाइस को नियंत्रक के बजाय वापस दिया गया) को डिवाइन करने के लिए, डिवाइस पेड़ के बाद आदेश के आधार पर मैं आगे गया और पेरेंट आईडीपीफिक्स पर आधारित एक पेड़ का निर्माण किया। क्वेरी रिटर्न, जो सेटअप उपकरण के माध्यम से डिवाइस ट्री गणना से मेल खाता है, प्रत्येक रूट हब है (जिसके लिए पूर्ववर्ती नियंत्रक की पहचान करता है), उसके बाद के उपकरणों की पुनरावृत्ति के द्वारा, उदाहरण के लिए, मेरे सिस्टम पर:
    • पहला नियंत्रक का रूट हब
    • दूसरे नियंत्रक का रूट हब
      • द्वितीय नियंत्रक के रूट हब के तहत पहला हब (पेरेंटआईडीपीफ़िक्स)
        • पहला संमिश्र यंत्र, दूसरे नियंत्रक के रूट हब के तहत पहली हब के तहत (हब के पेंटरआईडीपीफिक्स से ऊपर पीएनपी डिवइसआईआईडी मैचों की, इसके पास अपना पैरेन्टआईडीपीफिक्स है)
          • संमिश्र डिवाइस का छुपाया डिवाइस हिस्सा (समग्र डिवाइस के ParentIDPrefix के ऊपर PNPDeviceID मिलान)
        • दूसरा नियंत्रक के रूट हब के तहत पहला केंद्र के तहत दूसरा डिवाइस
          • संमिश्र डिवाइस का छुपाया डिवाइस भाग
      • दूसरे नियंत्रक के रूट हब के तहत दूसरा हब
        • दूसरा नियंत्रक के रूट हब के तहत दूसरे केंद्र के तहत पहला उपकरण
      • दूसरे नियंत्रक के रूट हब के तहत तीसरा केंद्र
      • आदि।
  • पूछे गए Win32_USBController इससे मुझे मेरे नियंत्रकों के पीएनपी डिव्यूसीआईडी ​​के बारे में विस्तृत जानकारी मिली जो डिवाइस पेड़ के शीर्ष पर हैं (जो पिछली क्वेरी के पूर्व थे)। पिछली चरण में व्युत्पन्न वृक्ष का प्रयोग करते हुए, लगातार अपने बच्चों (रूट हब) और उनके बच्चों (अन्य केन्द्रों) और उनके बच्चों (गैर-हब उपकरणों और समग्र उपकरणों) और उनके बच्चों आदि पर पुनरावृत्त किया जाता है।
    • पहले चरण में संग्रहीत मानचित्र को संदर्भित करके मेरे पेड़ में प्रत्येक डिवाइस के लिए पुनः प्राप्त विवरण। (वैकल्पिक रूप से, कोई भी पहला कदम छोड़ सकता है, और इस चरण पर जानकारी प्राप्त करने के लिए व्यक्तिगत रूप से PNPDeviceId का उपयोग कर Win32_PnPEntity क्वेरी कर सकता है; शायद एक सीपीयू बनाम मेमोरी ट्रेडऑफ़ जिसका निर्धारण करना बेहतर है।)

संक्षेप में, Win32USBControllerDevice निर्भरता एक सिस्टम पर यूएसबी उपकरणों की एक पूरी सूची है (नियंत्रकों के अलावा अन्य, जो कि एक ही क्वेरी में पूर्ववृत्त हैं), और रजिस्ट्री से जानकारी के साथ और अन्य प्रश्नों से इन PNPDeviceId जोड़े को क्रॉस-रेफ्रेंस करके उल्लेख किया गया है, एक विस्तृत तस्वीर का निर्माण किया जा सकता है।

जिन डिवाइस में मुझे दिलचस्पी थी, उनको देखने के लिए, मैंने इस पोस्ट के आधार पर, एडल हाज़्हा के कोड में Win32_USBHub द्वारा Win32_PnPEntity को बदल Win32_USBHub था। यह मेरे लिए काम करता है:

 namespace ConsoleApplication1 { using System; using System.Collections.Generic; using System.Management; // need to add System.Management to your project references. class Program { static void Main(string[] args) { var usbDevices = GetUSBDevices(); foreach (var usbDevice in usbDevices) { Console.WriteLine("Device ID: {0}, PNP Device ID: {1}, Description: {2}", usbDevice.DeviceID, usbDevice.PnpDeviceID, usbDevice.Description); } Console.Read(); } static List<USBDeviceInfo> GetUSBDevices() { List<USBDeviceInfo> devices = new List<USBDeviceInfo>(); ManagementObjectCollection collection; using (var searcher = new ManagementObjectSearcher(@"Select * From Win32_PnPEntity")) collection = searcher.Get(); foreach (var device in collection) { devices.Add(new USBDeviceInfo( (string)device.GetPropertyValue("DeviceID"), (string)device.GetPropertyValue("PNPDeviceID"), (string)device.GetPropertyValue("Description") )); } collection.Dispose(); return devices; } } class USBDeviceInfo { public USBDeviceInfo(string deviceID, string pnpDeviceID, string description) { this.DeviceID = deviceID; this.PnpDeviceID = pnpDeviceID; this.Description = description; } public string DeviceID { get; private set; } public string PnpDeviceID { get; private set; } public string Description { get; private set; } } } 

यदि आप ManagementObjectSearcher को निम्न में बदलते हैं:

 ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", @"SELECT * FROM Win32_PnPEntity where DeviceID Like ""USB%"""); 

तो "GetUSBDevices () इस तरह दिखता है"

 static List<USBDeviceInfo> GetUSBDevices() { List<USBDeviceInfo> devices = new List<USBDeviceInfo>(); ManagementObjectCollection collection; using (var searcher = new ManagementObjectSearcher(@"SELECT * FROM Win32_PnPEntity where DeviceID Like ""USB%""")) collection = searcher.Get(); foreach (var device in collection) { devices.Add(new USBDeviceInfo( (string)device.GetPropertyValue("DeviceID"), (string)device.GetPropertyValue("PNPDeviceID"), (string)device.GetPropertyValue("Description") )); } collection.Dispose(); return devices; } 

}

आपके परिणाम यूएसबी उपकरणों तक सीमित होंगे (आपके सिस्टम पर सभी प्रकार के विपरीत)

आपको ये धागा उपयोगी लग सकता है और यहां यह एक गूगल कोड प्रोजेक्ट है जिसका उदाहरण है (यह पी / ने setupapi.dll )।

यह लोगों के लिए बहुत सरल उदाहरण है, केवल हटाए जाने योग्य यूएसबी ड्राइव की तलाश में।

using System.IO;

 foreach (DriveInfo drive in DriveInfo.GetDrives()) { if (drive.DriveType == DriveType.Removable) { Console.WriteLine(string.Format("({0}) {1}", drive.Name.Replace("\\",""), drive.VolumeLabel)); } }