ユーザーが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