Обнаружение вставки / удаления последовательного порта

Я взаимодействую с портом USB-to-serial, который можно вставить или удалить в в любой момент. Я' Мы обнаружили, что я могу использовать WMI (особенно с использованием WMI Code Creator ) для запроса изменений устройства на ПК.

В сгенерированном ниже фрагменте подписана Win32_DeviceChangeEvent . Однако это событие не показывает , какое устройство (например, USB, последовательный порт и т. Д.) Вызвало событие. Есть ли способ получать уведомления только при вставке или удалении последовательных портов?

Чтобы уточнить, суть кода не для обнаружения открытия / закрытия последовательных портов, а для определения того, был ли новый порт добавлен к машине, или предыдущий порт был удален .

using System;
using System.Management;
using System.Windows.Forms;

namespace WMISample
{
    public class WMIReceiveEvent
    {
        public WMIReceiveEvent()
        {
            try
            {
                WqlEventQuery query = new WqlEventQuery(
                    "SELECT * FROM Win32_DeviceChangeEvent");

                ManagementEventWatcher watcher = new ManagementEventWatcher(query);
                Console.WriteLine("Waiting for an event...");

                watcher.EventArrived += 
                    new EventArrivedEventHandler(
                    HandleEvent);

                // Start listening for events
                watcher.Start();

                // Do something while waiting for events
                System.Threading.Thread.Sleep(10000);

                // Stop listening for events
                watcher.Stop();
                return;
            }
            catch(ManagementException err)
            {
                MessageBox.Show("An error occurred while trying to receive an event: " + err.Message);
            }
        }

        private void HandleEvent(object sender,
            EventArrivedEventArgs e)
        {
            Console.WriteLine("Win32_DeviceChangeEvent event occurred.");
        }

        public static void Main()
        {
            WMIReceiveEvent receiveEvent = new WMIReceiveEvent();
            return;
        }

    }
}

21
задан Pat 2 May 2013 в 00:06
поделиться