2011-11-18 30 views
8

Bilgisayarım'a yeni bir sürücü eklendiğinde ve tercihen NTFS sürücüsünde yeni bir sürücü için yeni bağlama noktası oluşturulduğunda nasıl bir olay yakalanır?Sürücü bağlama olayını algıla C#


bunu dışarı figued ama monte klasörleri çalışmaz:

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

Herhangi bir fikir? Bir form varsa Eugene belirtildiği gibi

+0

Olası yinelenen ait: http://stackoverflow.com/questions/4019065/monitoring-drives- with-wmi – aleroot

+1

Windows API ile WM_DEVICECHANGE mesajını işlemek zorundasınız. Yine de, C# ile nasıl başa çıkacağını bilmiyorum. –

+0

Sadece NTFS sürücülerinde takılı klasörler için böyle bir şey var mı? – user629926

cevap

7

, sen wm_devicechange mesajları yakalamak için onun WndProc yöntemini geçersiz kılabilirsiniz:

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

Muhtemelen bir süre sonra kodumu windows servisine yönlendirmem gerekecek bu yüzden bu çözüm işe yaramayacak. Yine de teşekkürler. – user629926

+0

, bir Windows Hizmetinde yapmak istiyorsanız, bunu kontrol etmelisiniz: http://www.codeproject.com/KB/system/Windows_Services.aspx?msg=2900262 –