c#中的闪存驱动器检测器

时间:2015-10-11 14:02:06

标签: c# flash

我正在寻找c#中的闪存驱动器检测器我看到了很多例子,但不是很简单或有评论。 我试过使用这段代码:

protected override void WndProc(ref Message m)
{

    if (m.Msg == WM_DEVICECHANGE)
    {
        DEV_BROADCAST_VOLUME vol = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_VOLUME));
        if ((m.WParam.ToInt32() == DBT_DEVICEARRIVAL) &&  (vol.dbcv_devicetype == DBT_DEVTYPVOLUME) )
        {
            MessageBox.Show(DriveMaskToLetter(vol.dbcv_unitmask).ToString());
        }
        if ((m.WParam.ToInt32() == DBT_DEVICEREMOVALCOMPLETE) && (vol.dbcv_devicetype == DBT_DEVTYPVOLUME))
        {
            MessageBox.Show("usb out");
        }
    }
    base.WndProc(ref m);
}

[StructLayout(LayoutKind.Sequential)] //Same layout in mem
public struct DEV_BROADCAST_VOLUME
{
    public int dbcv_size;
    public int dbcv_devicetype;
    public int dbcv_reserved;
    public int dbcv_unitmask;
}

private static char DriveMaskToLetter(int mask)
{
    char letter;
    string drives = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //1 = A, 2 = B, 3 = C
    int cnt = 0;
    int pom = mask / 2;
    while (pom != 0)    // while there is any bit set in the mask shift it right        
    {        
        pom = pom / 2;
        cnt++;
    }
    if (cnt < drives.Length)
        letter = drives[cnt];
    else
        letter = '?';
    return letter;
}

如果有人可以提供帮助,我会非常感激。

1 个答案:

答案 0 :(得分:1)

var drives = DriveInfo.GetDrives().Where(x=> x.IsReady && x.DriveType == DriveType.Removable);

这将返回当前可访问的可移动设备。