c# - WMI:在插入时获取 USB 设备描述

标签 c# .net wmi insertion usb

如何获取设备 ID 和其他关于插入 USB 设备的描述? 我找到了一个如何获得有关 USB 设备插入/移除的通知的示例。但是如何获取设备描述信息呢?

这是我的代码片段:

WqlEventQuery q;
ManagementScope scope = new ManagementScope("root\\CIMV2");
scope.Options.EnablePrivileges = true;

try
{
    q = new WqlEventQuery();
    q.EventClassName = "__InstanceDeletionEvent";
    q.WithinInterval = new TimeSpan(0, 0, 3);
    q.Condition = @"TargetInstance ISA 'Win32_USBControllerdevice'";
    w = new ManagementEventWatcher(scope, q);
    w.EventArrived += new EventArrivedEventHandler(USBRemoved);
    w.Start();
}
... catch()....

更新:实际上,它是一个带有 USB 连接的串行 COM 设备。所以没有 driveName 属性。如何获得 USB 描述,我可以在设备管理器中看到它? WMI 是否在有关 USB 插入的通知中提供此信息?

最佳答案

根据您更新的答案完成新答案。您可以检查任何连接的 USB 设备:

        ManagementScope sc =
            new ManagementScope(@"\\YOURCOMPUTERNAME\root\cimv2");

        ObjectQuery query =
            new ObjectQuery("Select * from Win32_USBHub");

        ManagementObjectSearcher searcher = new ManagementObjectSearcher(sc, query);
        ManagementObjectCollection result = searcher.Get();

        foreach (ManagementObject obj in result)
        {
            if (obj["Description"] != null) Console.WriteLine("Description:\t" + obj["Description"].ToString());
            if (obj["DeviceID"] != null) Console.WriteLine("DeviceID:\t" + obj["DeviceID"].ToString());
            if (obj["PNPDeviceID"] != null) Console.WriteLine("PNPDeviceID:\t" + obj["PNPDeviceID"].ToString());
        }

(参见 MSDN WMI tasks examples )

或查看任何COM ConnectedDevice

        ManagementScope sc =
            new ManagementScope(@"\\YOURCOMPUTERNAME\root\cimv2");
        ObjectQuery query =
            new ObjectQuery("Select * from Win32_SerialPort");

        searcher = new ManagementObjectSearcher(sc, query);
        result = searcher.Get();

        foreach (ManagementObject obj in result)
        {
            if (obj["Caption"] != null) Console.WriteLine("Caption:\t" + obj["Description"].ToString());
            if (obj["Description"] != null) Console.WriteLine("Description:\t" + obj["DeviceID"].ToString());
            if (obj["DeviceID"] != null) Console.WriteLine("DeviceID:\t" + obj["PNPDeviceID"].ToString());
        }

(有关详细信息,请参阅 ActiveX Experts)

关于c# - WMI:在插入时获取 USB 设备描述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6642633/

相关文章:

c# - system.Decimal 是否使用比 'decimal' 更多的内存?

.net - 为什么 .NET 中的匿名类型被实现为引用类型?

c# - 为什么 "root\\StandardCimv2"在 Windows 7 中不起作用?

c# - Azure表存储: maximum variable size?

c - 使用 IOCTL_STORAGE_QUERY_PROPERTY 获取序列号

c# - 从非默认命名空间读取 WMI 类

C# Web 服务和全局变量

c#访问空闲工作流数据

c# - 使用类来存储游戏数据,最佳实践?

c# - 为什么显示下拉列表需要在 DataGridView 中单击两次?