C#笔记2 盘符查找、打开、监听

一、移动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);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值