2011-11-18 10 views
8

Jak wykryć zdarzenie, gdy nowy dysk zostanie dodany do Mój komputer, a najlepiej i gdy nowy punkt instalacji dla dysku zostanie utworzony na dysku NTFS?Wykryj zdarzenie zamontowania dysku w języku C#


I figued się to, ale nie działa na zamontowanych foldery:

_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(); 

jakieś pomysły?

+0

Możliwy duplikat: http://stackoverflow.com/questions/4019065/monitoring-drives- with-wmi – aleroot

+1

Przy pomocy interfejsu API systemu Windows powinieneś przetworzyć wiadomość WM_DEVICECHANGE. Nie wiem jednak, jak sobie z tym poradzić w języku C#. –

+0

Czy jest coś takiego tylko dla zamontowanych folderów na dyskach NTFS? – user629926

Odpowiedz

7

Jeśli masz formę, można przesłonić jego metodę WndProc złapać wiadomości WM_DEVICECHANGE jak wspomniano Eugene:

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 
    } 
} 
+0

Prawdopodobnie będę musiał przenieść mój kod do usługi Windows jakiś czas później, więc to rozwiązanie nie będzie działać. Dzięki i tak. – user629926

+0

jeśli chcesz to zrobić w usłudze Windows, musisz to sprawdzić: http://www.codeproject.com/KB/system/Windows_Services.aspx?msg=2900262 –