该C#代码实现监控USB接口是否有设备接入或拨出,包括多个U盘。

 using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Forms; namespace MyApplication
{
public partial class Form1 : Form
{
const int WM_DEVICECHANGE = 0x0219; // 发生设备变动
const int DBT_DEVICEARRIVAL = 0x8000; // 系统检测到一个新设备
const int DBT_DEVTYP_VOLUME = 0x00000002; // 逻辑卷标
const int DBT_CONFIGCHANGECANCELED = 0x0019;
const int DBT_CONFIGCHANGED = 0x0018;
const int DBT_CUSTOMEVENT = 0x8006;
const int DBT_DEVICEQUERYREMOVE = 0x8001;
const int DBT_DEVICEQUERYREMOVEFAILED = 0x8002; // 系统完成移除一个设备
const int DBT_DEVICEREMOVECOMPLETE = 0x8004;
const int DBT_DEVICEREMOVEPENDING = 0x8003;
const int DBT_DEVICETYPESPECIFIC = 0x8005;
const int DBT_DEVNODES_CHANGED = 0x0007;
const int DBT_QUERYCHANGECONFIG = 0x0017;
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;
} public Form1()
{
InitializeComponent();
} protected override void WndProc(ref Message m)
{
if (m.Msg == WM_DEVICECHANGE)
{
switch (m.WParam.ToInt32())
{
case WM_DEVICECHANGE:
break;
case DBT_DEVICEARRIVAL://U disk upload
DriveInfo[] s = DriveInfo.GetDrives();
foreach (DriveInfo drive in s)
{
if (drive.DriveType == DriveType.Removable)
{
Console.WriteLine("==================================================");
Console.WriteLine("the U disk in! ,name:" + drive.Name.ToString());
break;
}
}
Console.WriteLine("==================================================");
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 disk is out
DriveInfo[] I = DriveInfo.GetDrives();
foreach (DriveInfo DrInfo in I)
{
int devType = Marshal.ReadInt32(m.LParam, );
if (devType == DBT_DEVTYP_VOLUME)
{
DEV_BROADCAST_VOLUME vol;
vol = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_VOLUME));
string ID = vol.dbcv_unitmask.ToString("x");
Console.WriteLine(IO(ID) + ": U disk out!");
}
}
break;
case DBT_DEVICEREMOVEPENDING:
break;
case DBT_DEVICETYPESPECIFIC:
break;
case DBT_DEVNODES_CHANGED:
break;
case DBT_QUERYCHANGECONFIG:
break;
case DBT_USERDEFINED:
break;
default:
break;
}
}
base.WndProc(ref m);
} public string IO(string IO)
{
string Value = "";
switch (IO)
{
case "":
Value = "A:";
break;
case "":
Value = "B:";
break;
case "":
Value = "C:";
break;
case "":
Value = "D:";
break;
case "":
Value = "E:";
break;
case "":
Value = "F:";
break;
case "":
Value = "G:";
break;
case "":
Value = "H:";
break;
case "":
Value = "I:";
break;
case "":
Value = "J:";
break;
case "":
Value = "K:";
break;
case "":
Value = "L:";
break;
case "":
Value = "M:";
break;
case "":
Value = "N:";
break;
case "":
Value = "O:";
break;
case "":
Value = "P:";
break;
case "":
Value = "Q:";
break;
case "":
Value = "R:";
break;
case "":
Value = "S:";
break;
case "":
Value = "T:";
break;
case "":
Value = "U:";
break;
case "":
Value = "V:";
break;
case "":
Value = "W:";
break;
case "":
Value = "X:";
break;
case "":
Value = "Y:";
break;
case "":
Value = "Z:";
break;
default: break;
}
return Value;
}
}
}

C#监控USB接口的更多相关文章

  1. rockchip 3128 平台USB接口鼠标U盘功能调试日记

    2019-04-12 关键词: rk3128 OTG.rk3128外接鼠标U盘.RK外接鼠标U盘 本篇文章是笔者根据自己当前所掌握知识对 rk3128 平台 USB 接口接鼠标实现输入功能调试的一个记 ...

  2. Python监控网站接口值

    Python监控网站接口值: #!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'liudong' import urllib,sy ...

  3. 下一代USB接口将支持双向拔插,于明年亮相

    近日,USB接口标准制定组织表示新一代USB接口将于明年年中亮相,而其名称目前被暂定为了USB Type-C.该组织表示USB Type-C标准将允许制造商采用更纤薄的接口设计,在实用性大大提高的同时 ...

  4. USB接口介绍

        USB设备系统分为两个部分,USB Host端和USB Device端,以USB接口的U盘为例子,U盘自身是一个USB Device,PC机的USB接口以及相关的控制电路为USB Host部分 ...

  5. (九)打印机驱动设置—USB接口的设置

    佳博打印机代理商淘宝店https://shop107172033.taobao.com/index.htm?spm=2013.1.w5002-9520741823.2.Sqz8Pf 在此店购买的打印机 ...

  6. USB接口定义

    一般的排列方式是:红白绿黑从左到右 定义: 红色-USB电源 标有-VCC.Power.5V.5VSB字样 绿色-USB数据线(正)-DATA+.USBD+.PD+.USBDT+ 白色-USB数据线( ...

  7. 如何禁用电脑USB接口

    方法一,BIOS设置法 重新启动计算机,在开机过程中,点击键盘上的“Delete”键,进入BIOS设置界面,选择“Integrated Peripherals”选项,展开后将“USB 1.1 Cont ...

  8. 突发小事件,USB接口问题

    昨天遇到的突发事件,突然USB接口全部瘫了,键盘鼠标全部不能用,换到别人电脑上可以,吓尿了,以为本子主板挂了,但是发现插U盘竟然可以识别而且可以打开,感觉可能是静电问题,果然,彻底关机,拔掉电池,然后 ...

  9. shell判断USB接口是否有设备插入

    #/bin/sh usb_num=$(cat /proc/scsi/scsi | grep "Vendor" | wc -l)if [ $usb_num = 2 ];then    ...

随机推荐

  1. 使用ueditor小结

    1. 导入 js: ueditor.config.js ueditor.all.js css/images/plugin: themes lang dialog(可选) third-party(可选) ...

  2. Asp.net中的ajax回调模式(ICallbackEventHandler)

    客户端回调本质上就是指通过前端的客户端脚本向服务器端传递相应的数据参数,服务器端再以接受到的参数进行查询和处理,最后将结果回传到客户端进行显示.asp.net 2.0提供了实现无刷新回调的接口ICal ...

  3. hexdump—Linux系统的二进制文件查看工具

    hexdump 无参: 相当于 hexdump -x 0000000 457f 464c 0102 0001 0000 0000 0000 0000 0000010 0002 003e 0001 00 ...

  4. 99 Lisp Problems 二叉树(P54~P69)

    P54A (*) Check whether a given term represents a binary tree Write a predicate istree which returns ...

  5. tensorflow 运行成功!

    折腾了一天安装tensorflow环境,终于可以运行,也记录一下安装中容易犯的错误总结(写给python小白们) 一.win7 双系统 安装ubuntu 16.04 ,参考 http://jingya ...

  6. HTML5新特性之WebRTC

    1.概述 WebRTC是“网络实时通信”(Web Real Time Communication)的缩写,它主要用来让浏览器实时获取和交换视频.音频和数据. WebRTC共分三个API. MediaS ...

  7. 几种图片下载lib对比

  8. 设置zookeeper jvm内存

    看了你的问题, 我还特意的查看了ZooKeeper的启动脚本代码.ZooKeeper启动脚本没有加任何参数,也就是使用jvm默认的. 如果想要加大ZooKeeper的JVM使用内存.可以在更改{ZK_ ...

  9. php XML 读写 创建

    一 .XML 读 1.1. 首先同目录定义好一个XML文件 : book.xml <?xml version="1.0" encoding="utf-8" ...

  10. 在MACOS上实现交叉编译

    在嵌入式开发过程中,设备的存储空间和运算能力通常会比较低,这时候,比如要编译一个linux的内核,嵌入式设备就不能胜任了,所以,实现交叉编译还是很必要的.通过交叉编译,我们就能够在我们的pc上编译出能 ...