Windows系统下,每当外部设备有变动时都会向所有窗体发送一个消息,我们根据这点可以让程序检测出例如U盘插拔的信号,在C#代码中实现如下:

        [StructLayout(LayoutKind.Sequential)]struct DEV_BROADCAST_HDR{public UInt32 dbch_size;//dbch_size表示结构体实例的字节数public UInt32 dbch_devicetype; //dbch_devicetype字段值等于DBT_DEVTYP_VOLUME时,表示当前设备是逻辑驱动器public UInt32 dbch_reserved;}[StructLayout(LayoutKind.Sequential)]struct DEV_BROADCAST_VOLUME{public UInt32 dbcv_size;public UInt32 dbcv_devicetype;public UInt32 dbcv_reserved;public UInt32 dbcv_unitmask;//dbcv_unitmask 字段表示当前改变的驱动器掩码,第一位表示驱动器号A,第二位表示驱动器号B,第三位表示驱动器号C,以此类推…… public UInt16 dbcv_flags;//dbcv_flags 表示驱动器的类别,如果等于1,则是光盘驱动器;如果是2,则是网络驱动器;如果是硬盘、U盘则都等于0}protected override void DefWndProc(ref Message m){//textBox1.AppendText("Message = " + m + "\r\n");if (m.Msg == 0x0219)//WM_DEVICECHANGE{//textBox1.AppendText("m.WParam = " + m.WParam.ToInt32() + "\r\n");switch (m.WParam.ToInt32()){                  case 0x8000://DBT_DEVICEARRIVAL 有设备插入{DEV_BROADCAST_HDR dbhdr = (DEV_BROADCAST_HDR)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_HDR));if (dbhdr.dbch_devicetype == 0x00000002)//DBT_DEVTYP_VOLUME{DEV_BROADCAST_VOLUME dbv = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_VOLUME));if (dbv.dbcv_flags == 0){//U盘插入操作Console.WriteLine("检测到U盘插入!");}}break;}case 0x8004://DBT_DEVICEREMOVECOMPLETE 有设备拔出{DEV_BROADCAST_HDR dbhdr = (DEV_BROADCAST_HDR)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_HDR));if (dbhdr.dbch_devicetype == 0x00000002)//DBT_DEVTYP_VOLUME{DEV_BROADCAST_VOLUME dbv = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_VOLUME));if (dbv.dbcv_flags == 0){Console.WriteLine("检测到U盘拔出!");}}break;}}}base.DefWndProc(ref m);}

其中我注释掉的几行都是供测试用的语句,这里是只对WParam参数为0x8000(设备插入)和0x8004(设备拔出)做了判断,大家还可以取消 //textBox1.AppendText("Message = " + m + "\r\n");注释来自行测试其他操作发送的指令,如鼠标移动时也会发送一串消息,这里分享的是一个思路,觉得有用的话别忘了点赞关注哦~

C#随手笔记——自动检测外部设备(U盘)的插拔相关推荐

  1. [转]VB:如何检测到U盘的插拔(源代码)

    听说现在网络上流传着一些能实时检测到U盘插拔消息并能在其插入后伺机拷贝其中文档资料的恶意程序,而日前在CSDN论坛也看到有网友询问这类程序的实现原理,为此我想通过一个简单的VB程序演示一下核心操作过程 ...

  2. Android开发-动态获取电视盒子U盘的插拔状态和路径

    最近公司的盒子端扩展一个新功能:插入U盘后自动幻灯片播放U盘指定文件夹下的所有图片,拔出U盘后恢复视频播放. 直接上代码: 一.注册广播监听U盘的插拔 1.1.注册 IntentFilter inte ...

  3. sim插拔识别时间_一种sim卡检测装置及其检测sim卡插拔的方法

    一种sim卡检测装置及其检测sim卡插拔的方法 [技术领域] [0001]本发明涉及移动通讯设备领域,尤其涉及一种S頂卡检测装置及其检测S頂卡插拔的方法. [背景技术] [0002]S頂卡是移动终端中 ...

  4. android 系统自动检测U盘,烧写MAC地址

    最近,需要给设备手动烧写MAC地址.用户插入U盘到盒子,系统自动读取U盘里面的文件,获取到文件内容,即mac地址.再调用底层接口即可完成mac地址的烧写.我所需要做的就是检测U盘,读取文件,根据接口返 ...

  5. 论文阅读笔记——模式物种中个体的自动检测和识别

    模式物种中个体的自动检测和识别 论文简介 标题 期刊情况 论文内容 摘要 介绍 相关工作 动物检测 个体动物识别 背景 快速RCNN AlexNet 方法论 日期增加 基于快速RCNN的检测 鉴定 实 ...

  6. docker 安装git_docker随手笔记第十二节 jenkins+docker+nginx+纯静态页面配置

    docker随手笔记第一节 docker概念及安装 docker随手笔记第二节 docker常用命令解析 docker随手笔记第三节 docker构建java镜像 docker随手笔记第四节 dock ...

  7. 配置多个git账号_docker随手笔记第七节 jenkins通过git部署java微服务插件安装

    docker随手笔记第一节 docker概念及安装 docker随手笔记第二节 docker常用命令解析 docker随手笔记第三节 docker构建java镜像 docker随手笔记第四节 dock ...

  8. docker nginx配置_docker随手笔记第十二节 jenkins+docker+nginx+纯静态页面配置

    docker随手笔记第一节 docker概念及安装 docker随手笔记第二节 docker常用命令解析 docker随手笔记第三节 docker构建java镜像 docker随手笔记第四节 dock ...

  9. 计算机开机跳过硬盘检查,怎么取消开机自动检测硬盘磁盘检查,开机老是修复分区怎么办及原因...

    电脑使用长了,经常会出现各种问题,特别是正常关机情况下,系统每次开机时居然会自动检测硬盘,笔记本老是开机自检硬盘,就是扫描每一个分区检测错误,非常耽误时间,于是就想把自检硬盘关了,虽然想关了,但完全不 ...

最新文章

  1. 机器学习01-定义、线性回归、梯度下降
  2. JAVA编译异常处理:java.lang.OutOfMemoryError: PermGen space
  3. UA OPTI570 量子力学4 带不含时的标量势的粒子的薛定谔方程
  4. wireshark无权限
  5. Coursera课程Python for everyone:chapter6
  6. require.js用法简介
  7. java 泛型应用,通用返回类,泛型方法,泛型静态方法
  8. (46)FPGA面试题FPGA内部结构及资源
  9. MyBatis 3.5.1 发布,Java 数据持久层框架
  10. Tomcat下载安装以及配置(详细教程)
  11. 蒙特卡罗仿真(1):入门求生指南(Python实例)
  12. Linux C语言学习day11:递归与结构体
  13. 【源码+图片素材】1小时做出Java坦克大战小游戏_Java初级项目_Java练手项目_Java项目实战_Java游戏开发实战教学_Java课程设计_课设
  14. 一年读了八十本书之后,我推荐这五本给你
  15. react插件,树状图(可自由定义子节点结构,大小,样式)
  16. python获取qq好友ip_使用Python模拟登录QQ邮箱获取QQ好友列表
  17. uboot的移植——移植uboot官方的uboot到x210开发板
  18. 【C语言】PAT乙级:1005 继续(3n+1)猜想
  19. 基于艾宾浩斯遗忘曲线的英语词汇学习微信小程序——一些思路和想法
  20. 计算机快速算法研究,可视化继电保护整定计算中快速计算方法的研究

热门文章

  1. C语言数据类型占字节数
  2. JavaScript-84:利用函数求任意两个数的和
  3. 手机wap和html有什么区别,解析WEB和WAP之间有什么区别
  4. 腾讯游戏人脸识别验证是否会保存用户信息
  5. opencv3/C++ mixChannels()详解:4通道图像分割、HSV通道获取
  6. 快递公司泄露买家信息最高罚3万 快递员双挨罚
  7. CSDN超级实习生 | 寒假之前,收藏好这份大厂2022年实习生招聘计划
  8. 通信协议设计注意事项
  9. 【解析几何】解析几何(Analytic geometry)
  10. 英飞凌单片机--GTM(Generic Timer Module)