C#监控USB接口
该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接口的更多相关文章
- rockchip 3128 平台USB接口鼠标U盘功能调试日记
2019-04-12 关键词: rk3128 OTG.rk3128外接鼠标U盘.RK外接鼠标U盘 本篇文章是笔者根据自己当前所掌握知识对 rk3128 平台 USB 接口接鼠标实现输入功能调试的一个记 ...
- Python监控网站接口值
Python监控网站接口值: #!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'liudong' import urllib,sy ...
- 下一代USB接口将支持双向拔插,于明年亮相
近日,USB接口标准制定组织表示新一代USB接口将于明年年中亮相,而其名称目前被暂定为了USB Type-C.该组织表示USB Type-C标准将允许制造商采用更纤薄的接口设计,在实用性大大提高的同时 ...
- USB接口介绍
USB设备系统分为两个部分,USB Host端和USB Device端,以USB接口的U盘为例子,U盘自身是一个USB Device,PC机的USB接口以及相关的控制电路为USB Host部分 ...
- (九)打印机驱动设置—USB接口的设置
佳博打印机代理商淘宝店https://shop107172033.taobao.com/index.htm?spm=2013.1.w5002-9520741823.2.Sqz8Pf 在此店购买的打印机 ...
- USB接口定义
一般的排列方式是:红白绿黑从左到右 定义: 红色-USB电源 标有-VCC.Power.5V.5VSB字样 绿色-USB数据线(正)-DATA+.USBD+.PD+.USBDT+ 白色-USB数据线( ...
- 如何禁用电脑USB接口
方法一,BIOS设置法 重新启动计算机,在开机过程中,点击键盘上的“Delete”键,进入BIOS设置界面,选择“Integrated Peripherals”选项,展开后将“USB 1.1 Cont ...
- 突发小事件,USB接口问题
昨天遇到的突发事件,突然USB接口全部瘫了,键盘鼠标全部不能用,换到别人电脑上可以,吓尿了,以为本子主板挂了,但是发现插U盘竟然可以识别而且可以打开,感觉可能是静电问题,果然,彻底关机,拔掉电池,然后 ...
- shell判断USB接口是否有设备插入
#/bin/sh usb_num=$(cat /proc/scsi/scsi | grep "Vendor" | wc -l)if [ $usb_num = 2 ];then ...
随机推荐
- ServiceManager 小结
1 ServiceManger 根据name优先从Map中获取IBinder,例如AMS.WMS.PMS:如果Map中没有对应的IBinder,我们获取Serviceanager的代理ServiceM ...
- Java Arrays 排序
Java SDK中的排序分为两种情况: .对基础类型数组的排序,使用DualPivotQuicksort类 a.如果是对char.short数组的排序,因为byte.char.short分别为8bit ...
- ASP.NET 回调技术(CallBack)
在asp.net中客户端与服务器端的交互默认都是整页面提交, 此时客户端将当前页面表单中的数据(包括一些自动生成的隐藏域)都提交到服务器端,服务器重新实例化一个当前页面类的实例响应这个请求,然后将整个 ...
- Exists 比Contains 慢非常多。
void Main() { List<string> s = new List<string>(){}; for(int i=0;i<10000;i++) { s.Add ...
- const ,static,inline
const: 1 定义变量 ,如下写法都可以: TYPE const ValueName = value; const TYPE ValueName = value; ...
- [转]C++学习–基础篇(书籍推荐及分享)
C++入门 语言技巧,性能优化 底层硬货 STL Boost 设计模式 算法篇 算起来,用C++已经有七八年时间,也有点可以分享的东西: 以下推荐的书籍大多有电子版.对于技术类书籍,电子版并不会带来一 ...
- 使用jQuery开发一个带有密码强度检验的超酷注册页面
在今天的jQuery教程中,我们将介绍如何使用jQuery和其它相关的插件来生成一个漂亮的带有密码强度检验的注册页面,希望大家喜欢! 相关的插件和类库 complexify - 一个密码强度检验jQu ...
- 移动端使用HTML5表单增强体验
我们知道,HTML5新增了许多表单类型,如: number,email,url,tel,datetime,month,datetime-local等等,像datetime,month这些非常方便,免得 ...
- EF执行存储过程时超时问题
异常信息:Message = EF "Timeout 时间已到.在操作完成之前超时时间已过或服务器未响应." ((IObjectContextAdapter);
- TeamViewer连接Windows8.1系统黑屏解决方案
TeamViewer用win7连接win8.1 都是64位系统,总是黑屏,可以看到鼠标也联动了,聊天传输文件都没有问题,反向用win8.1连接win7也没问题,而且TeamViewer更新到最新版本了 ...