WMI:插入时获取USB设备描述

6

当USB设备插入时,我该如何获取设备ID和其他描述信息?

我找到了一个例子,可以在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插入的通知以及此信息?

1个回答

15
根据您的更新,完整的新答案。您可以检查任何连接的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任务示例)。
或者查看任何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专家以获取更多详细信息)

也许您可以选择我的回答,并将其设置为“已解答”,谢谢。 - Pilgerstorfer Franz
为什么要踩我?请告诉我你不喜欢什么?在你看来有什么问题吗? - Pilgerstorfer Franz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接