在c#中检测驱动器挂载事件

use*_*926 8 c# filesystems winapi mount drive

如何在将新驱动器添加到"我的电脑"时捕获事件,并且最好在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();
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Mar*_*ill 7

如果你有一个表单,你可以覆盖它的WndProc方法来捕获WM_DEVICECHANGE消息,如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
    }
}
Run Code Online (Sandbox Code Playgroud)