zoukankan      html  css  js  c++  java
  • C# U盘扫描

    无意中看到的一个例程,保留一份。

     
    以供后用。
     
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.IO;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
     
     
    namespace USB
    {
        public partial class USB : Form
        {
            public USB()
            {
                InitializeComponent();
            }
            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 const int DBT_DEVTYP_VOLUME = 0x00000002;
            // private LockScreen Ls = new LockScreen();
            public string ID = "";
            public string Value;
            public string[] item;
     
            [StructLayout(LayoutKind.Sequential)]
            public struct DEV_BROADCAST_VOLUME
            {
                public int dbcv_size;
                public int dbcv_devicetype;
                public int dbcv_reserved;
                public int dbcv_unitmask;
            }
     
     
     
            protected override void WndProc(ref Message m)
            {
                try
                {
                    if (m.Msg == WM_DEVICECHANGE)
                    {
                        switch (m.WParam.ToInt32())
                      
     {
                            case WM_DEVICECHANGE:
                                break;
                            case DBT_DEVICEARRIVAL://U盘有插入
                                this.timer1.Enabled = true;
                                DriveInfo[] s = DriveInfo.GetDrives();
                                foreach (DriveInfo DriveI in s)
                                {
                                    if (DriveI.DriveType == DriveType.Removable)
                                    {
                                        // Ls.Show();
                                        // this.Hide();
                                        // MessageBox.Show("sss");
     
                                        break;
                                    }
                                    int devType = Marshal.ReadInt32(m.LParam, 4);
                                    if (devType == DBT_DEVTYP_VOLUME)
                                    {
                                        DEV_BROADCAST_VOLUME vol;
                                        vol = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_VOLUME));
                                        ID = vol.dbcv_unitmask.ToString("x");
                                        this.Text = IO(ID);
                                        this.Tag = IO(ID);
                                        //if (item.Length ==0||IO(ID)!=this.Tag.ToString ())
                                        //{
     
                                        //}
                                    }
                                    this.label1.Text = this.Text;
                                }
                                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盘卸载
                                DriveInfo[] I = DriveInfo.GetDrives();
                                foreach (DriveInfo DrInfo in I)
                                {
                                    int devType = Marshal.ReadInt32(m.LParam, 4);
                                    if (devType == DBT_DEVTYP_VOLUME)
                                    {
                                        DEV_BROADCAST_VOLUME vol;
                                        vol = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_VOLUME));
                                        ID = vol.dbcv_unitmask.ToString("x");
                                        this.Text = IO(ID) + "盘退出! ";
     
     
                                    }
                                    this.label1.Text += this.Text;
                                    // MessageBox.Show("U盘已经卸载", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                }
                                break;
                            case DBT_DEVICEREMOVEPENDING:
                                break;
                            case DBT_DEVICETYPESPECIFIC:
                                break;
                            case DBT_DEVNODES_CHANGED:
                                break;
                            case DBT_QUERYCHANGECONFIG:
                                break;
                            case DBT_USERDEFINED:
                                break;
                            default:
                                break;
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                base.WndProc(ref m);
            }
     
            private void USB_Load(object sender, EventArgs e)
            {
     
            }
            public string IO(string ff)
            {
                switch (ff)
                {
                    case "1":
                        Value = "A:";
                        break;
                    case "2":
                        Value = "B:";
                        break;
                    case "4":
                        Value = "C:";
                        break;
                    case "8":
                        Value = "D:";
                        break;
                    case "10":
                        Value = "E:";
                        break;
                    case "20":
                        Value = "F:";
                        break;
                    case "40":
                        Value = "G:";
                        break;
                    case "80":
                        Value = "H:";
                        break;
                    case "100":
                        Value = "I:";
                        break;
                    case "200":
                        Value = "J:";
                        break;
                    case "400":
                        Value = "K:";
                        break;
                    case "800":
                        Value = "L:";
                        break;
                    case "1000":
                        Value = "M:";
                        break;
                    case "2000":
                        Value = "N:";
                        break;
                    case "4000":
                        Value = "O:";
                        break;
                    case "8000":
                        Value = "P:";
                        break;
                    case "10000":
                        Value = "Q:";
                        break;
                    case "20000":
                        Value = "R:";
                        break;
                    case "40000":
                        Value = "S:";
                        break;
                    case "80000":
                        Value = "T:";
                        break;
                    case "100000":
                        Value = "U:";
                        break;
                    case "200000":
                        Value = "V:";
                        break;
                    case "400000":
                        Value = "W:";
                        break;
                    case "800000":
                        Value = "X:";
                        break;
                    case "1000000":
                        Value = "Y:";
                        break;
                    case "2000000":
                        Value = "Z:";
                        break;
                    default: break;
                }
                return Value;
            }
     
            private void timer1_Tick(object sender, EventArgs e)
            {
                // this.Text = ID; 
            }
        }
    }
  • 相关阅读:
    流处理 —— Spark Streaming中的Window操作
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.8 提供带注解的限定符元数据
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.7 为自动检测组件提供作用域
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.6 给自动检测组件命名
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.5 在组件中定义bean的元数据
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.4 使用过滤器自定义扫描
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.3 自动检测类和注册bean的定义
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.2 元注解
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.1 @Component和深层的构造型注解
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10 类路径扫描和被管理的组件
  • 原文地址:https://www.cnblogs.com/lossingdawn/p/4054210.html
Copyright © 2011-2022 走看看