C#实现检测U盘的插拔

来源:互联网 发布:html转xml python 编辑:程序博客网 时间:2024/05/17 01:36

C# Winform中WndProc 函数作用:

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

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

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

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

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

简单测试代码:

 

using System;using System.Collections.Generic;using System.ComponentModel;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窗体会出现下面响应



0 0
原创粉丝点击