Я хочу определить, когда пользователь подключает или удаляет звуковую карту USB. Я сумел фактически поймать событие, когда это произойдет, но я не могу сказать, что только что подключенКак определить, какое устройство было подключено к USB-слоту?
Я попробовал подход, основанный на this вопрос:.
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: на основе предложений победителя, я создал full solution, который обертывает все функциональные возможности.
Что об использовании события RegisterDeviceNotification? используемые в этой библиотеке, например: https://code.google.com/p/winusbnet/ –
@SimonMourier. Эта библиотека, похоже, больше подходит для общения с устройствами USB, а не для их обнаружения. Я не вижу примеров, показывающих, как обнаруживать устройства, и я не вижу ничего в API, который поддается этой цели. – AngryHacker