2013-08-15 40 views
9

Tôi cần biết loại thiết bị USB nào hiện đang được sử dụng trong hệ thống. Có một số USB specification về mã lớp của thiết bị USB. Nhưng tôi không thể nhận được loại thiết bị, yêu cầu WMI WQL: select * from Win32_UsbHub cung cấp giá trị null trên mã Lớp, mã Lớp con, trường Loại giao thức. Bất kỳ ý tưởng làm thế nào để phát hiện loại thiết bị USB hiện đang được sử dụng?C# phát hiện thiết bị USB ClassCode (loại thiết bị usb)

mã hiện tại của tôi:

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

Bạn có thể gửi các ví dụ đầy đủ bao gồm 'ManagementScope', 'ObjectQuery' và' ManagementObjectSearcher' sử dụng? – SwDevMan81

+0

ManagementObjectThu thập sưu tập; sử dụng (var searcher = new ManagementObjectSearcher (@ "Chọn * Từ Win32_USBHub")) collection = searcher.Get(); – MelnikovI

+0

Công cụ wbemtest.exe cho cùng một hiệu ứng: 'Class cod, Subclass code, trường Protocol type' là null – MelnikovI

Trả lời

4

Bạn có thể tải USB View Source như là một điểm khởi đầu. Điều này lặp qua tất cả các thiết bị USB trên PC (C#) và kéo thông tin về từng thiết bị. Để có được các trường loại Class code, Subclass codeProtocol, bạn sẽ cần sửa đổi một chút. Thay đổi bên dưới và chạy nó và bạn sẽ nhận được thông tin trên mỗi thiết bị USB bằng cách nhấp vào mục trong chế độ xem dạng cây (thông tin sẽ xuất hiện trong bảng bên phải).

Sửa đổi 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; } 
} 

Sửa đổi 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

Có vẻ như đó là những gì tôi cần, tôi sẽ thử nó. – MelnikovI

+0

@PeterJ - Có vẻ như các tệp đã được cấu trúc lại, tôi đã cập nhật liên kết. – SwDevMan81

Các vấn đề liên quan