该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. 菜鸟教程之工具使用(十二)——Eclipse突出显示选中的相同变量

    大家都知道在Eclipse中,选中一个变量或者方法名(或者说是一个单词),当前文件中跟他一样的变量会被突出显示,这个功能很好用.能让我们很方便的找到该变量在哪被用到了.前段时间我的Eclipse的这个 ...

  2. 2.C#中通过委托Func消除重复代码

    阅读目录   一:重复的代码 二:C#中通过委托Func消除重复代码 一:重复代码    public class Persion { public string Name { get; set; } ...

  3. 小数量宽带用户的福音,Panabit 云计费easyradius 接口隆重发布,PA宽带计费系统

    PA接口在早前就发布了,但是一直迟迟没有发布官方说明文档,由于最近问的客户较多,特写了这篇文档 由于PA使用标准radius认证协议,所以用户需要在本地搭建一个计费,由于大部分用户的数量只有几百个,不 ...

  4. SAP的吐槽来源

    这几天看了 梅林传奇(英国剧) , 封面是 梅林传奇的男主 对着女主 一脸无语的玩着电脑. 原来 看梅林传奇的时候,以为自己看错了,没有理会到这部剧的真谛,是自己不懂得和发现美,为了滚娘从第二季就弃了 ...

  5. C#下水晶报表打印自定义纸张

    在VB6中,如果要自定义纸张很方便:  Rpt.PaperSize = crPaperUser  Rpt.SetUserPaperSize lZZG, lZZK 但在C#中却不行了,没有发现 SetU ...

  6. HBase Snapshot功能介绍

    HBase在0.94之后提供了Snapshot功能,一个snapshot其实就是一组metadata信息的集合,它可以让管理员将表恢复到以前的一个状态.snapshot并不是一份拷贝,它只是一个文件名 ...

  7. Android开发艺术探索笔记——View(二)

    Android开发艺术探索笔记--View(二) View的事件分发机制 学习资料: 1.Understanding Android Input Touch Events System Framewo ...

  8. [LeetCode] “全排列”问题系列(二) - 基于全排列本身的问题,例题: Next Permutation , Permutation Sequence

    一.开篇 既上一篇<交换法生成全排列及其应用> 后,这里讲的是基于全排列 (Permutation)本身的一些问题,包括:求下一个全排列(Next Permutation):求指定位置的全 ...

  9. JS基础回顾,小练习(去除字符串空格)

    方法1: var str = ' h t m l 5 '; function trim(str) { var reg = /(\s+)/g; var m,s = str; while(m = reg. ...

  10. Unity 坐标系

    Unity 使用的是左手坐标系