簡體   English   中英

C#中的閃存驅動器檢測器

[英]Flash drive detector in c#

我在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;
}

如果有人可以幫忙,我將非常感激。

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

這將返回當前可訪問的可移動設備。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM