2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > C#实现检测U盘的插拔

C#实现检测U盘的插拔

时间:2019-04-13 19:16:09

相关推荐

C#实现检测U盘的插拔

C# Winform中WndProc 函数作用:

主要用在拦截并处理系统消息和自定义消息

比如:

windows程序会产生很多消息,比如你单击鼠标,移动窗口都会产生消息。这个函数就是默认的消息处理函数。你可以重载这个函数来制定自己的消息处理流程.

在Winform程序中,可以重写WndProc函数,来捕捉所有发生的窗口消息。

这样,我们就可以"篡改"传入的消息,而人为的让窗口改变行为。

我们用C#实现检测U盘插拔的功能,是用重写C# WndProc函数来做到的。

简单测试代码:

using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.IO; //添加IO命名空间namespace CheckUdisk{public partial class Form1 : Form{//定义常量public const int WM_DEVICECHANGE = 0x219;public const int DBT_DEVICEARRIVAL = 0x8000;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;public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){}protected override void WndProc(ref Message m){try{if (m.Msg == WM_DEVICECHANGE){switch (m.WParam.ToInt32()){case WM_DEVICECHANGE:break;case DBT_DEVICEARRIVAL:DriveInfo[] s = DriveInfo.GetDrives();foreach (DriveInfo drive in s){if (drive.DriveType == DriveType.Removable){this.richTextBox1.AppendText("U盘已插入,盘符是" + drive.Name.ToString() + "\r\n");break;}}break;case DBT_CONFIGCHANGECANCELED:MessageBox.Show("2");break;case DBT_CONFIGCHANGED:MessageBox.Show("3");break;case DBT_CUSTOMEVENT:MessageBox.Show("4");break;case DBT_DEVICEQUERYREMOVE:MessageBox.Show("5");break;case DBT_DEVICEQUERYREMOVEFAILED:MessageBox.Show("6");break;case DBT_DEVICEREMOVECOMPLETE:this.richTextBox1.AppendText("U盘已卸载");break;case DBT_DEVICEREMOVEPENDING:MessageBox.Show("7");break;case DBT_DEVICETYPESPECIFIC:MessageBox.Show("8");break;case DBT_DEVNODES_CHANGED:MessageBox.Show("9");break;case DBT_QUERYCHANGECONFIG:MessageBox.Show("10");break;case DBT_USERDEFINED:MessageBox.Show("11");break;default:break;}}}catch (Exception ex){MessageBox.Show(ex.Message);}base.WndProc(ref m);}}}

当我们插拔U盘时,Form1窗体会出现下面响应

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。