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

9

如何在“我的电脑”中添加新驱动器时捕获事件,最好是当在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();

有什么想法吗?


可能是重复的问题:https://dev59.com/AVHTa4cB1Zd3GeqPRGY7 - aleroot
1
使用Windows API,您应该处理WM_DEVICECHANGE消息。不过,我不知道如何在C#中处理它。 - Eugene Mayevski 'Callback
有没有类似的东西可以用于 NTFS 驱动器上挂载的文件夹? - user629926
1个回答

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

我可能需要将我的代码移植到Windows服务,所以这个解决方案不可行。无论如何,还是谢谢。 - user629926
如果您想在Windows服务中执行此操作,必须检查以下链接:http://www.codeproject.com/KB/system/Windows_Services.aspx?msg=2900262 - Davide Piras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接