作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我需要知道系统中当前使用的是哪种 USB 设备。有一个 USB specification关于 USB 设备的类代码。但我无法获取设备类型,WMI 请求 WQL: select * from Win32_UsbHub
在类代码、子类代码、协议(protocol)类型字段上提供空值。关于如何检测当前使用的 USB 设备类型有什么想法吗?
我当前的代码:
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
}
}
最佳答案
您可以下载USB View Source作为起点。这将遍历 PC (C#) 上的所有 USB 设备并提取有关每个设备的信息。要获取 Class code
、Subclass code
和 Protocol
类型字段,您需要稍微修改一下。更改以下内容并运行它,您将通过单击 TreeView 中的项目获得每个 USB 设备的信息(信息将显示在右侧面板中)。
对 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; }
}
对 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"));
// ...
}
关于C#检测usb设备ClassCode(usb设备类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18252352/
我找不到关于如何使用 @:classCode 的单个示例(将 native 成员直接注入(inject)文件)。这在编译时因 Unexpected untyped 而失败: @:classCode u
我是一名优秀的程序员,十分优秀!