Я взаимодействую с портом 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;
}
}
}