4

WMI を使用して「デバイスの追加/デバイスの削除」イベントに登録しようとしています。私がデバイスと言うときは、Disk-On-Key や、アクセスできるファイルを持つその他のデバイスの行の何かを意味します...

イベントに登録していて、イベントが発生しましたが、EventType プロパティが予期したものと異なります。

ドキュメント ( MSDN ) の状態: 1-構成の変更、2-デバイスの追加、3-デバイスの削除、4-ドッキング。何らかの理由で、常に値が 1 になります。

何か案は ?

サンプルコードは次のとおりです。

public class WMIReceiveEvent
{
    public WMIReceiveEvent()
    {
        try
        {
            WqlEventQuery query = new WqlEventQuery(
                "SELECT * FROM Win32_DeviceChangeEvent");

            ManagementEventWatcher watcher = new ManagementEventWatcher(query);
            Console.WriteLine("Waiting for an event...");

            watcher.EventArrived += 
                new EventArrivedEventHandler(
                HandleEvent);

            // Start listening for events
            watcher.Start();

            // Do something while waiting for events
            System.Threading.Thread.Sleep(10000);

            // Stop listening for events
            watcher.Stop();
            return;
        }
        catch(ManagementException err)
        {
            MessageBox.Show("An error occurred while trying to receive an event: " + err.Message);
        }
    }

    private void HandleEvent(object sender,
        EventArrivedEventArgs e)
    {
        Console.WriteLine(e.NewEvent.GetPropertyValue["EventType"]);
    }

    public static void Main()
    {
        WMIReceiveEvent receiveEvent = new WMIReceiveEvent();
        return;
    }
}
4

4 に答える 4

1

さて、コードが見つかりませんでした。私の古いRACアカウントで試しましたが、何もありません。古いバックアップには何もありません。図に行きます。しかし、私はそれをどのように行ったかを理解しようとしました、そしてこれは正しいシーケンスだと思います(私はそれの多くをこの記事に基づいています):

  1. すべてのドライブ文字を取得してキャッシュします。
  2. WM_DEVICECHANGEメッセージを待ち、1秒のタイムアウトでタイマーを開始します(これは、USBキー/他のデバイスを挿入するとすぐに開始し、ドライブが「落ち着いた」)。
  3. ドライブ文字を古いキャッシュと比較し、新しいキャッシュを検出します。
  4. それらのデバイス情報を取得します。

他の方法があることは知っていますが、さまざまなバージョンのWindowsで一貫して機能するのはそれだけであることがわかりました。クライアントが、挿入したあらゆる種類のデバイスから画像をアップロードするWebページでActiveXコントロールを使用する必要がありました(彼らはある種の印刷キオスクを作ったと思います)。

于 2008-09-15T11:24:13.643 に答える
0

上手、

uはwin32_logicalディスククラスを試して、それを__Instancecreationeventにバインドできます。必要な情報を簡単に入手できます

于 2009-07-13T16:07:06.127 に答える
0

おー!ええ、私はそれを経験しましたが、生の Windows API 呼び出しを少し前に使用し、あらゆる種類のメディアの挿入を検出する ActiveX コントロールを開発しました。バックアップからコードを見つけ出し、どのように解決したか教えていただけるかどうか試してみます。誰かが最初にアクセスした場合に備えて、RSS を購読します。

于 2008-09-02T21:21:38.593 に答える
0

システムでこれを試したところ、最終的に正しいコードが得られました。少し時間がかかります。12 ほどのイベントが発生しますが、そのうちの 1 つはデバイス接続コードです。

于 2010-03-08T02:38:50.827 に答える