Я хочу определить, когда пользователь подключает или удаляет звуковую карту USB. Мне удалось поймать событие, когда это произойдет, но я не могу сказать, что только что подключилось.
Я попробовал подход, основанный на этом вопросе:
string query =
"SELECT * FROM __InstanceCreationEvent " +
"WITHIN 2 "
+ "WHERE TargetInstance ISA 'Win32_PnPEntity'";
var watcher = new ManagementEventWatcher(query);
watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
watcher.Start();
Пока я получаю уведомления через событие EventArrived, я понятия не имею, как определить фактическое имя устройства, которое только что подключилось. Я прошел через каждое свойство и не мог вытащить из него головы или хвосты.
Я также попробовал другой запрос:
var query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent where EventType = 1 or EventType = 2");
var watcher = new ManagementEventWatcher(query);
watcher.EventArrived += watcher_EventArrived;
watcher.Stopped += watcher_Stopped;
watcher.Query = query;
watcher.Start();
но также безрезультатно. Есть ли способ найти имя устройства, которое было подключено или удалено.
Суть в том, что я хотел бы знать, когда звуковая карта USB подключена или удалена из системы. Он должен работать на Windows 7 и Vista (хотя я соглашусь только на Win7).
EDIT: на основе предложений победителя, я создал полное решение которое обертывает все функциональные возможности.