2013-08-15 50 views
9

Sistemde hangi tür USB aygıtlarının kullanıldığını bilmem gerekiyor. USB cihazlarının sınıf kodları hakkında bir USB specification bulunmaktadır. Ancak cihaz türünü alamıyorum, WMI isteği WQL: select * from Win32_UsbHub Sınıf kodu, Alt sınıf kodu, Protokol tipi alanları için boş değerler verin. Şu anda kullanımda olan USB cihaz tipini nasıl algılayacağınıza dair herhangi bir fikir var mı?C# USB aygıtını algıla ClassCode (usb aygıt türü)

Benim geçerli kod: Bir başlangıç ​​noktası olarak USB View Source indirebilirsiniz

ManagementObjectCollection collection; 
using (var searcher = new ManagementObjectSearcher(@"Select * From Win32_USBHub")) 
{ 
    collection = searcher.Get(); 
    foreach (var device in collection) 
     { 
      var deviceId = (string)GetPropertyValue("DeviceID"); 
      var pnpDeviceId = (string)GetPropertyValue("PNPDeviceID"); 
      var descr = (string)device.GetPropertyValue("Description"); 
      var classCode = device.GetPropertyValue("ClassCode"); //null here 
     } 
} 
+0

Eğer 'ManagementScope',' ObjectQuery' ve 'ManagementObjectSearcher' dahil olmak üzere tam bir örnek gönderebilir miyim kullanım? – SwDevMan81

+0

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

+0

wbemtest.exe aracı aynı efekti verir: 'Sınıf kodlaması, Alt sınıf kodu, Protokol türü 'alanları sıfırdır – MelnikovI

cevap

4

. Bu, bir PC'deki (C#) tüm USB aygıtlarından geçer ve her biri hakkında bilgi çeker. Class code, Subclass code ve Protocol tür alanlarını almak için, hafifçe değiştirmeniz gerekir. Aşağıdakini değiştirin ve çalıştırın ve her USB cihazındaki bilgileri ağaç görünümündeki öğeye tıklayarak sağlayın (bilgi sağ panelde görünecektir). USB.cs için

Değişiklikler: fmMain.cs için

// Add the following properties to the USBDevice class 
// Leave everything else as is 
public byte DeviceClass 
{ 
    get { return DeviceDescriptor.bDeviceClass; } 
} 

public byte DeviceSubClass 
{ 
    get { return DeviceDescriptor.bDeviceSubClass; } 
} 

public byte DeviceProtocol 
{ 
    get { return DeviceDescriptor.bDeviceProtocol; } 
} 

Değişiklikler

// Add the following lines inside the ProcessHub function 
// inside the "if (port.IsDeviceConnected)" statement 
// Leave everything else as is 
if (port.IsDeviceConnected) 
{ 
    // ... 
    sb.AppendLine("SerialNumber=" + device.SerialNumber); 
    // Add these three lines 
    sb.AppendLine("DeviceClass=0x" + device.DeviceClass.ToString("X")); 
    sb.AppendLine("DeviceSubClass=0x" + device.DeviceSubClass.ToString("X")); 
    sb.AppendLine("DeviceProtocol=0x" + device.DeviceProtocol.ToString("X")); 
    // ... 
} 
+0

İhtiyacım olan şey gibi görünüyor, deneyeceğim. – MelnikovI

+0

@PeterJ - Dosyaların yeniden yapılandırıldığı anlaşılıyor, bağlantıyı güncelledim. – SwDevMan81