3

Windows サービスで次のコードを使用して、USB ディスク ドライブが挿入および削除されたことを通知します。

WqlEventQuery query = new WqlEventQuery("__InstanceOperationEvent", 
    "TargetInstance ISA 'Win32_LogicalDisk' AND TargetInstance.DriveType=2");
query.WithinInterval = TimeSpan.FromSeconds(1);
_deviceWatcher = new ManagementEventWatcher(query);
_deviceWatcher.EventArrived += new EventArrivedEventHandler(OnDeviceEventArrived);
_deviceWatcher.Start();

XP と Vista で動作しますが、XP では、ハード ドライブが毎秒アクセスされる非常に目立つ音が聞こえます。効果音なしでイベントを表示する別の WMI クエリはありますか?

4

3 に答える 3

2

これがあなたのケースに当てはまるかどうかはわかりませんが、C# コード (ここには投稿できません) で RegisterDeviceNotification を使用して、USB デバイスが接続されていることを検出しています。インポートする必要があるネイティブ関数はいくつかありますが、一般的にはうまく機能します。最初に C++ で動作させてから、C# に移行する必要があるものを確認するのが最も簡単です。

koders Code search には、役立つ可能性のある C# デバイス管理モジュール全体のように見えるものがいくつかあります。

http://www.koders.com/csharp/fidEF5C6B3E2F46BE9AAFC93DB75515DEFC46DB4101.aspx

于 2008-09-20T02:03:20.913 に答える
1

新しい Win32_LogicalDisk インスタンスの作成を通知する InstanceCreationEvent を探してみてください。現在、作成ではなく、インスタンス操作についてクエリを実行しています。これらのイベントのクエリ間隔はかなり長いことを知っておく必要があります。USB の挿入と取り出しが検出されるよりも速くなる可能性があります。

于 2008-11-30T16:04:22.323 に答える