Обнаружение события монтирования диска в c # - PullRequest
8 голосов
/ 19 ноября 2011

Как перехватить событие, когда новый диск добавлен в Мой компьютер и, предпочтительно, и когда новая точка монтирования для некоторого диска создается на диске NTFS?


Я понял это, но это нене работает на смонтированных папках:

 _eventWatcher = new ManagementEventWatcher("SELECT * FROM Win32_VolumeChangeEvent");

 _eventWatcher.EventArrived += (o, args) => 
     {switch(args.NewEvent["EventType"].ToString()[0])
         {
             case '2':
                 //mount
                 Debug.WriteLine(args.NewEvent["DriveName"]);
                 break;
             case '3':
                 //unmount
                 break;
         }
     };

 _eventWatcher.Start();

Есть идеи?

1 Ответ

7 голосов
/ 19 ноября 2011

Если у вас есть форма, вы можете переопределить ее метод WndProc, чтобы перехватывать сообщения WM_DEVICECHANGE, как упомянул Евгений:

private const int WM_DEVICECHANGE = 0x219;

protected override void WndProc(ref Message m)
{
    base.WndProc(m);

    if (m.Msg == WM_DEVICECHANGE)
    {
        // Check m.wParam to see exactly what happened
    }
}
...