怎么在c#中判断U盘是否插入或者拨出?并得到u盘的根目录。最好给个例子,
谢谢了?
急用.

解决方案 »

  1.   

    转:protected override void WndProc(ref Message m)//监视Windows消息 

    const int WM_DEVICECHANGE = 0x219; 
    const int WM_DEVICEARRVIAL = 0x8000; 
    //如果m.Msg的值为0x8000那么表示有U盘插入 if(m.Msg == .............. )
    {
    //.....
    }

      

  2.   

    这样我写了可是只发生WM_DEVICECHANGE
    不发生WM_DEVICEARRVIAL消息怎么会事?
    多多指明教,
    小女子不胜感激?
      

  3.   


    我先给您一个解决方案吧:使用System.IO.DriveInfo类可以获取当前系统中的驱动器的信息。调用GetDrives方法获取驱动器名称然后判断DriveType枚举是否等于Removable就可以了。然后就是自动获取盘符的问题,您可以使用Timer,但是这样会对性能有比较大的影响,比较好的一个方法是重写窗体的WndProc方法,然后截取WM_DEVICECHANGE系统消息。
    希望对您有帮助。
    ==========================================================
    对于补充的答复:您好,简单的代码如下:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            const int WM_DEVICECHANGE = 0x0219;        public Form1()
            {
                InitializeComponent();
            }        protected override void WndProc(ref Message m)
            {
                if (m.Msg == WM_DEVICECHANGE)
                {
                    MessageBox.Show("Got it!");
                }            base.WndProc(ref m);
            }
        }
    }您需要首先声明Windows消息的消息ID,然后重写WndProc方法来进行判断。很抱歉对于将PID转化为盘符的方法,我现在没有很好的方法。 ~~~~~~~~~~~~~~~~~~不是我写的~~~~~~~~~~~~~