2011-11-18 72 views
8

如何在新驱动器添加到“我的电脑”时以及何时在NTFS驱动器上创建某个驱动器的新挂载点时捕获事件?在c中检测驱动器挂载事件#


我figued了这一点,但它并没有在安装文件夹的工作:

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

任何想法?

+0

可能重复的:http://stackoverflow.com/questions/4019065/monitoring-drives- with-wmi – aleroot

+1

对于Windows API,您应该处理WM_DEVICECHANGE消息。不过,不知道如何在C#中处理它。 –

+0

有没有像NTFS驱动器上安装的文件夹这样的东西? – user629926

回答

7

如果你有一个表格,你可以重载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 
    } 
} 
+0

我可能需要在一段时间后将我的代码移植到Windows服务中,因此此解决方案无法工作。不管怎么说,还是要谢谢你。 – user629926

+0

如果您想在Windows服务中执行此操作,则必须检查以下内容:http://www.codeproject.com/KB/system/Windows_Services.aspx?msg=2900262 –