2013-08-15 8 views
9

Ich muss wissen, welche Art von USB-Geräten derzeit im System verwendet wird. Es gibt einen USB specification über Klassencodes von USB-Geräten. Aber ich kann nicht Gerätetyp, WMI-Anfrage WQL: select * from Win32_UsbHub Null-Werte auf Klassencode, Unterklasse Code, Protokoll Typ Felder zu erhalten. Irgendwelche Ideen, wie USB-Gerätetyp derzeit verwendet wird zu erkennen?C# erkennen USB-Gerät ClassCode (USB-Gerätetyp)

Mein aktueller Code:

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

Können Sie nach dem vollständigen Beispiel einschließlich 'ManagementScope',' ObjectQuery' und 'ManagementObjectSearcher' Verwendung? – SwDevMan81

+0

ManagementObjectCollection-Auflistung; mit (var search = new ManagementObjectSearcher (@ "Select * Von Win32_USBHub")) collection = searcher.Get(); – MelnikovI

+0

wbemtest.exe Werkzeug geben den gleichen Effekt: 'Klassen cod, Subclass code, Protokolltyp' Felder sind null – MelnikovI

Antwort

4

Sie USB View Source als Ausgangspunkt herunterladen. Dies führt eine Schleife durch alle USB-Geräte auf einem PC (C#) und ruft Informationen darüber ab. Um die Felder Class code, und Protocol Typ zu erhalten, müssen Sie es leicht ändern. Ändern Sie das Folgende und führen Sie es aus. Sie erhalten die Informationen zu jedem USB-Gerät, indem Sie auf das Element in der Baumansicht klicken (die Informationen werden im rechten Fenster angezeigt).

Änderungen USB.cs:

// 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; } 
} 

Änderungen fmMain.cs

// 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

Sieht aus wie es ist, was ich brauche, ich werde es versuchen. – MelnikovI

+0

@PeterJ - Sieht so aus, als ob die Dateien restrukturiert wurden, ich habe den Link aktualisiert. – SwDevMan81