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; 
            }
        }
    }
  • 相关阅读:
    Selenium自动化Chrome浏览器 在windows下窗口最大化
    Linux下的压缩解压缩命令详解及实例
    Windows下及Mac下的IntelliJ IDEA快捷键
    Missing artifact com.oracle:ojdbc6:jar:10.2.0.4.0问题解决 ojdbc包pom.xml出错
    使用cmd命令进行导入
    导入dmp文件时,需要删除原有ORACLE数据库实例
    HTML编码规范、CSS编码规范
    javascript函数与表达式
    JS中闭包、函数与对象的介绍和用法
    JS中typeof和instanceof用法区别
  • 原文地址:https://www.cnblogs.com/lossingdawn/p/4054210.html
Copyright © 2011-2022 走看看