2008-09-02 13 views
4

WMIを使用して、「Device added/Device removed」イベントに登録しようとしています。私がデバイスと言うとき - 私はアクセス可能なファイルがあるDisk-On-Keyまたは他のデバイスの行に何かを意味します...WMIとWin32_DeviceChangeEvent - 間違ったイベントタイプが返されましたか?

私はイベントに登録していて、イベントが発生していますしかし、私が見たいと思っているものとは、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; 
    } 
} 

答えて

0

ああ:

ここではサンプルコードです!さて、私はこれまでに行ってきましたが、未処理のWindows API呼び出しを使用していましたが、何らかのメディアの挿入を検出したActiveXコントロールを開発していました。私は私のバックアップからコードを発見して、私がそれをどのように解決したかを教えてくれるかどうかを調べるつもりです。誰かが最初に来た場合に備えてRSSを購読します。

1

まあ、私はコードを見つけることができませんでした。私の古いRACアカウントで試してみました。私の古いバックアップの中には何もありません。 Go figure。しかし、私はそれをやった方法を動作するように試みたが、私はこれが正しい順序だと思う(私はこのarticleにそれの多くをもと):

  1. は、すべてのドライブ文字とキャッシュ それらを取得します。
  2. WM_DEVICECHANGE メッセージが表示されるまで待ち、そして(これは/あなたが USBキーを挿入するとすぐに開始するよう を開始スプリアス WM_DEVICECHANGEメッセージの多くを避ける に行われている1秒の タイムアウトでタイマーを開始ドライブが「整定」されている場合は、末尾が )。
  3. ドライブ文字を の古いキャッシュと比較し、新しいものを検出します。
  4. これらのデバイス情報を取得します。私のクライアントとしていずれかから画像をアップロードし、Webページ上のActiveXコントロールを使用したことを、私は他の方法がある知っているが、それは、異なるバージョンのWindowsで一貫働くだろう唯一の1であることが判明した、と私たちは必要な

あなたが挿入したデバイスの種類(私は彼らが何らかの種類の印刷キオスクを作り出したと思う)。

0

まあ、

uがwin32_logicalディスククラスを試してみて、__InstanceCreationEventにバインドすることができます。 あなたは簡単に必要な情報を得ることができます

0

私はこれを私のシステムで試しました。それはちょっと時間がかかります。私は十数ほどのイベントを受け取り、そのうちの1つはデバイス接続コードです。

関連する問題