C# U盘扫描

简介: 无意中看到的一个例程,保留一份。   以供后用。     using System; using System.Collections.Generic; using System.ComponentModel; using System.

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

 
以供后用。
 
 
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) + "盘退出!\n";
 
 
                                }
                                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; 
        }
    }
}
遗失的拂晓
目录
相关文章
|
3月前
|
存储 安全 Windows
U盘无法访问怎么解决?7个U盘修复方法
​U盘很常见也很常用,平时在存储文件和传输数据的时候使用频率非常高。经常使用U盘的用户可能对U盘无法访问的情况比较熟悉了。U盘出现打不开无法访问数据的问题时不仅会影响我们的工作和学习效率,最致命的是还会导致重要数据的丢失。所以,U盘无法访问是什么原因引起的呢?遇到这个问题的时候怎么处理才稳妥呢?今天就和大家一起了解一下U盘无法访问的原因和应对的方法,帮助大家轻松摆脱困扰。
|
7月前
|
存储 安全 Windows
U盘文件损坏且无法读取怎么修复?五个方法帮你搞定
U盘文件目录损坏无法读取可能是硬件、软件或人为操作导致的问题。修复方法包括:1) 使用数据恢复软件提取重要文件;2) 运行Windows的磁盘检查工具;3) 格式化U盘(数据会丢失);4) 检查U盘健康状况,如坏道修复;5) 若硬件故障,联系官方售后。在修复前,记得先备份数据。加强数据备份能减少损失。
|
4月前
|
存储 安全 芯片
U盘在电脑上读不出来怎么办?6个方法帮你修复U盘
平时在存储和传输数据的时候,我们经常会使用到U盘这种存储设备。U盘容量大,使用方便且便于携带,很受欢迎。 然而,在日常使用中,有时候会遇到U盘插入电脑后无法被电脑识别或读取的情况。这会让人感到困扰,因为我们无法访问U盘里的文件。遇到这种情况该怎么办呢?今天的内容会讨论一下U盘无法读取的症状、分析一下常见原因并且提供6个方法帮你修复U盘。
|
6月前
|
存储 安全
U盘坏了怎么把数据弄出来
在数字化时代,U盘虽便利,但损坏导致的数据丢失是个问题。U盘损坏分为物理和逻辑损坏,前者需专业服务,后者可尝试软件恢复。逻辑损坏时,避免格式化,使用DiskGenius等软件扫描、恢复文件。预防措施包括正确插拔、选择合适文件系统、避免震动摔落、选购优质U盘及定期杀毒。数据备份是关键。
U盘坏了怎么把数据弄出来
|
8月前
|
存储 算法 安全
U盘打不开提示格式化怎么办?(含数据恢复及U盘修复教程)
本文介绍了U盘无法打开并提示格式化的问题,包括症状(如系统弹出格式化提示,文件系统显示为RAW)和常见原因(文件系统损坏、物理损坏)。提供了修复步骤:检查U盘连接、使用数据恢复软件恢复数据、更新U盘驱动、格式化U盘及使用修复工具。强调在格式化前要备份数据,严重损坏时可能需寻求专业维修。
|
安全 Linux AndFix
win10 资源管理器 可以识别U盘 无法识别 移动硬盘【已解决】
win10 资源管理器 可以识别U盘 无法识别 移动硬盘【已解决】
161 0
win10 资源管理器 可以识别U盘 无法识别 移动硬盘【已解决】
|
搜索推荐 芯片 内存技术

热门文章

最新文章