Voglio rilevare quando l'utente inserisce o rimuove una scheda audio USB. Sono riuscito a catturare in realtà l'evento quando questo accade, ma non posso dire che cosa ha ottenuto appena collegatoCome identificare quale dispositivo è stato inserito nello slot USB?
ho provato un approccio basato su this domanda:.
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();
Mentre ricevo le notifiche tramite l'evento EventArrived, non ho idea di come determinare il nome effettivo del dispositivo che è appena stato collegato. Ho esaminato tutte le proprietà e non sono riuscito a farne testa o croce.
Ho anche provato una query diversa:
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();
ma anche senza alcun risultato. C'è un modo per trovare il nome del dispositivo che è stato collegato o rimosso.
La linea di fondo è che mi piacerebbe sapere quando una scheda audio USB è collegata o rimossa dal sistema. Dovrebbe funzionare su Windows 7 e Vista (anche se mi accontenterò solo di Win7).
MODIFICA: Sulla base dei suggerimenti del submitter vincente, ho creato uno full solution che include tutte le funzionalità.
Cosa succede ad usare l'evento RegisterDeviceNotification? utilizzato in questa libreria ad esempio: https://code.google.com/p/winusbnet/ –
@ SimonMourier Questa libreria sembra essere più utile per comunicare con dispositivi USB anziché rilevarli. Non vedo alcun esempio che mostri come rilevare i dispositivi, né vedo nulla nell'API che si presta a questo scopo. – AngryHacker