C# U盘扫描
无意中看到的一个例程,保留一份。
以供后用。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.IO;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace USB
{
public partial class USB : Form
{
public USB()
{
InitializeComponent();
}
public const int WM_DEVICECHANGE = 0x219;
public const int DBT_DEVICEARRIVAL = 0x8000;
public const int DBT_CONFIGCHANGECANCELED = 0x0019;
public const int DBT_CONFIGCHANGED = 0x0018;
public const int DBT_CUSTOMEVENT = 0x8006;
public const int DBT_DEVICEQUERYREMOVE = 0x8001;
public const int DBT_DEVICEQUERYREMOVEFAILED = 0x8002;
public const int DBT_DEVICEREMOVECOMPLETE = 0x8004;
public const int DBT_DEVICEREMOVEPENDING = 0x8003;
public const int DBT_DEVICETYPESPECIFIC = 0x8005;
public const int DBT_DEVNODES_CHANGED = 0x0007;
public const int DBT_QUERYCHANGECONFIG = 0x0017;
public const int DBT_USERDEFINED = 0xFFFF;
// 逻辑卷标
public const int DBT_DEVTYP_VOLUME = 0x00000002;
// private LockScreen Ls = new LockScreen();
public string ID = "";
public string Value;
public string[] item;
[StructLayout(LayoutKind.Sequential)]
public struct DEV_BROADCAST_VOLUME
{
public int dbcv_size;
public int dbcv_devicetype;
public int dbcv_reserved;
public int dbcv_unitmask;
}
protected override void WndProc(ref Message m)
{
try
{
if (m.Msg == WM_DEVICECHANGE)
{
switch (m.WParam.ToInt32())
{
case WM_DEVICECHANGE:
break;
case DBT_DEVICEARRIVAL://U盘有插入
this.timer1.Enabled = true;
DriveInfo[] s = DriveInfo.GetDrives();
foreach (DriveInfo DriveI in s)
{
if (DriveI.DriveType == DriveType.Removable)
{
// Ls.Show();
// this.Hide();
// MessageBox.Show("sss");
break;
}
int devType = Marshal.ReadInt32(m.LParam, 4);
if (devType == DBT_DEVTYP_VOLUME)
{
DEV_BROADCAST_VOLUME vol;
vol = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_VOLUME));
ID = vol.dbcv_unitmask.ToString("x");
this.Text = IO(ID);
this.Tag = IO(ID);
//if (item.Length ==0||IO(ID)!=this.Tag.ToString ())
//{
//}
}
this.label1.Text = this.Text;
}
break;
case DBT_CONFIGCHANGECANCELED:
break;
case DBT_CONFIGCHANGED:
break;
case DBT_CUSTOMEVENT:
break;
case DBT_DEVICEQUERYREMOVE:
break;
case DBT_DEVICEQUERYREMOVEFAILED:
break;
case DBT_DEVICEREMOVECOMPLETE: //U盘卸载
DriveInfo[] I = DriveInfo.GetDrives();
foreach (DriveInfo DrInfo in I)
{
int devType = Marshal.ReadInt32(m.LParam, 4);
if (devType == DBT_DEVTYP_VOLUME)
{
DEV_BROADCAST_VOLUME vol;
vol = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_VOLUME));
ID = vol.dbcv_unitmask.ToString("x");
this.Text = IO(ID) + "盘退出!\n";
}
this.label1.Text += this.Text;
// MessageBox.Show("U盘已经卸载", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
break;
case DBT_DEVICEREMOVEPENDING:
break;
case DBT_DEVICETYPESPECIFIC:
break;
case DBT_DEVNODES_CHANGED:
break;
case DBT_QUERYCHANGECONFIG:
break;
case DBT_USERDEFINED:
break;
default:
break;
}
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
base.WndProc(ref m);
}
private void USB_Load(object sender, EventArgs e)
{
}
public string IO(string ff)
{
switch (ff)
{
case "1":
Value = "A:";
break;
case "2":
Value = "B:";
break;
case "4":
Value = "C:";
break;
case "8":
Value = "D:";
break;
case "10":
Value = "E:";
break;
case "20":
Value = "F:";
break;
case "40":
Value = "G:";
break;
case "80":
Value = "H:";
break;
case "100":
Value = "I:";
break;
case "200":
Value = "J:";
break;
case "400":
Value = "K:";
break;
case "800":
Value = "L:";
break;
case "1000":
Value = "M:";
break;
case "2000":
Value = "N:";
break;
case "4000":
Value = "O:";
break;
case "8000":
Value = "P:";
break;
case "10000":
Value = "Q:";
break;
case "20000":
Value = "R:";
break;
case "40000":
Value = "S:";
break;
case "80000":
Value = "T:";
break;
case "100000":
Value = "U:";
break;
case "200000":
Value = "V:";
break;
case "400000":
Value = "W:";
break;
case "800000":
Value = "X:";
break;
case "1000000":
Value = "Y:";
break;
case "2000000":
Value = "Z:";
break;
default: break;
}
return Value;
}
private void timer1_Tick(object sender, EventArgs e)
{
// this.Text = ID;
}
}
}