WMI: получить описание USB-устройства при вставке

Как я могу получить идентификатор устройства и другое описание при подключении 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()....

ОБНОВЛЕНИЕ: на самом деле это устройство Serial COM с USB-подключением. Таким образом, нет свойства driveName. Как я могу получить описание USB, которое я вижу в диспетчере устройств? Предоставляет ли WMI эту информацию вместе с уведомлением о вставке USB?


person Jeffrey Rasmussen    schedule 10.07.2011    source источник


Ответы (1)


Полный новый ответ в соответствии с вашим обновленным ответом. Вы можете проверить любое подключенное 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 для получения дополнительной информации об этом)

person Pilgerstorfer Franz    schedule 10.07.2011
comment
возможно, вы можете выбрать мой ответ как полезный и установить для него ответ: D спасибо заранее - person Pilgerstorfer Franz; 11.07.2011
comment
почему минус? пожалуйста, дайте мне знать, что вам не понравилось? что не так на ваш взгляд? - person Pilgerstorfer Franz; 16.01.2013