一、移动U盘查找
//查找U盘是否存在
bool isGetU = false;
string upath = null; // U盘路径
DriveInfo[] s = DriveInfo.GetDrives();
for (int i = 0; i < s.Length; i++)
{
if (s[i].DriveType == DriveType.Removable)
{
upath = s[i].Name; //这个是盘符名称,后面需要使用
isGetU = true;
break
}
}
二、打开目录或者直接打开文件
打开目录:
string openFolderPath = @“目录路径”;
System.Diagnostics.Process.Start(“explorer.exe”, openFolderPath);
直接打开文件:
System.Diagnostics.Process.Start(openFile);
三、监听是否有U盘插入:
监听到对应字段的标识含义:
public const int WM_DEVICECHANGE = 0x219; //通知应用程序更改设备或计算机的硬件配置
public const int DBT_DEVICEARRIVAL = 0x8000; //u盘插入**************************
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;
[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)
{
// 发生设备变动
const int WM_DEVICECHANGE = 0x0219;
// 系统检测到一个新设备
const int DBT_DEVICEARRIVAL = 0x8000;
// 系统完成移除一个设备
const int DBT_DEVICEREMOVECOMPLETE = 0x8001;
// 逻辑卷标
const int DBT_DEVTYP_VOLUME = 0x00000002;
switch (m.Msg)
{
case WM_DEVICECHANGE:
switch (m.WParam.ToInt32())
{
case DBT_DEVICEARRIVAL:
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));
MessageBox.Show("显示:"+vol.dbcv_unitmask.ToString("x"));
}
break;
case DBT_DEVICEREMOVECOMPLETE:
MessageBox.Show("Removal");
break;
}
break;
}
base.WndProc(ref m);
}