Je souhaite détecter lorsque l'utilisateur branche ou supprime une carte son USB. J'ai réussi à attraper en fait l'événement lorsque cela se produit, mais je ne peux pas dire ce qui vient de se branchéComment identifier quel périphérique a été branché sur la fente USB?
J'ai essayé une approche basée sur this question.
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();
Pendant que je reçois les notifications via l'événement EventArrived, je n'ai aucune idée de la façon de déterminer le nom réel de l'appareil qui vient d'être branché. J'ai traversé toutes les propriétés et je n'ai pas pu en faire la tête ou la queue.
J'ai essayé aussi une autre requête:
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();
mais aussi en vain. Est-il possible de trouver le nom de l'appareil qui a été branché ou retiré.
L'essentiel est que je voudrais savoir quand une carte son USB est branché ou retiré du système. Il devrait fonctionner sur Windows 7 et Vista (même si je me contenterai de Win7 uniquement).
EDIT: Sur la base des suggestions du soumissionnaire gagnant, j'ai créé un full solution qui englobe toutes les fonctionnalités.
Qu'en est-il utiliser l'événement RegisterDeviceNotification? utilisé dans cette bibliothèque par exemple: https://code.google.com/p/winusbnet/ –
@SimonMourier Cette bibliothèque semble être plus pour communiquer avec les périphériques USB plutôt que de les détecter. Je ne vois pas d'exemples qui montrent comment détecter les périphériques, et je ne vois rien dans l'API qui se prête à cette fin. – AngryHacker