易语言监视USB插入删除设备并读取根目录文件

用到的API

.版本 2
 
.DLL命令 SetWindowLong, 子程序指针, , "SetWindowLongA"
    .参数 hwnd, 整数型
    .参数 nIndex, 整数型
    .参数 value, 子程序指针
 
.DLL命令 CallWindowProc, 整数型, , "CallWindowProcA"
    .参数 proc, 子程序指针
    .参数 hwnd, 整数型
    .参数 msg, 整数型
    .参数 wp, 整数型
    .参数 lp, 整数型
 
.DLL命令 复制结构体, 整数型, , "RtlMoveMemory"
    .参数 dest, PDEV_BROADCAST_VOLUME, 传址
    .参数 source, 整数型
    .参数 len, 整数型, , 14

自定义数据类型

.版本 2
 
.数据类型 PDEV_BROADCAST_VOLUME
    .成员 dbcv_size, 整数型, , , 14
    .成员 dbcv_devicetype, 整数型
    .成员 dbcv_reserved, 整数型
    .成员 dbcv_unitmask, 整数型
    .成员 dbcv_flags, 短整数型
 
.数据类型 _DEV_BROADCAST_HDR
    .成员 dbch_size, 整数型
    .成员 dbch_devicetype, 整数型
    .成员 dbch_reserved, 整数型

常量

.版本 2
 
.常量 WM_DEVICECHANGE, "537", , 驱动盘符被改变
.常量 DBT_DEVICEREMOVECOMPLETE, "32772"
.常量 DBT_DEVICERARRIVAL, "32768"
.常量 DBT_DEVTYP_OEM, "0"
.常量 DBT_DEVTYP_DEVNODE, "1"
.常量 DBT_DEVTYP_VOLUME, "2"
.常量 DBT_DEVTYP_PORT, "3"
.常量 DBT_DEVTYP_N, "4"

窗口子类化

  1. .版本 2
  2.  
  3. .程序集 窗口程序集1
  4. .程序集变量 a, 子程序指针
  5.  
  6. .子程序 __启动窗口_创建完毕
  7.  
  8. a = SetWindowLong (_启动窗口.取窗口句柄 (), -4, &MsgProc)

MsgProc

.版本 2
 
.子程序 MsgProc, 整数型
.参数 hwnd, 整数型
.参数 msg, 整数型
.参数 wp, 整数型
.参数 lp, 整数型
.局部变量 val, PDEV_BROADCAST_VOLUME
.局部变量 i, 整数型
.局部变量 mask, 整数型
 
.判断开始 (msg = 537)
    .判断开始 (wp = #DBT_DEVICERARRIVAL)  ' 插入设备
        复制结构体 (val, lp, 14)
        .如果真 (val.dbcv_devicetype = #DBT_DEVTYP_VOLUME)
            mask = val.dbcv_unitmask
            .变量循环首 (0, 25, 1, i)
                .如果真 (位与 (mask, 1) = 1)
                    跳出循环 ()
                .如果真结束
                mask = 右移 (mask, 1)
            .变量循环尾 ()
            编辑框1.加入文本 (“USB磁盘被插入,盘符:” + 字符 (65 + i) + #换行符)
            检测 (字符 (65 + i))
        .如果真结束
 
    .判断 (wp = #DBT_DEVICEREMOVECOMPLETE)  ' 删除设备
        复制结构体 (val, lp, 14)
        .如果真 (val.dbcv_devicetype = #DBT_DEVTYP_VOLUME)
            mask = val.dbcv_unitmask
            .变量循环首 (0, 25, 1, i)
                .如果真 (位与 (mask, 1)1)
                    跳出循环 ()
                .如果真结束
                mask = 右移 (mask, 1)
            .变量循环尾 ()
            编辑框1.加入文本 (“USB磁盘被拔除,盘符:” + 字符 (65 + i) + #换行符)
        .如果真结束
 
    .默认
 
    .判断结束
 
.默认
 
.判断结束
返回 (CallWindowProc (a, hwnd, msg, wp, lp))

检测USB根目录

.版本 2
 
.子程序 检测
.参数 盘符, 文本型
.局部变量 fn, 文本型
 
fn = 寻找文件 (盘符 + “:\*.*, )
编辑框2.内容 = “”
.判断循环首 (fn ≠ “”)
    编辑框2.加入文本 (fn + #换行符)
    fn = 寻找文件 (, )
.判断循环尾 ()

销毁还原窗口

.版本 2
 
.子程序 __启动窗口_将被销毁
 
a = SetWindowLong (_启动窗口.取窗口句柄 (), -4, a)

发布日期:

所属分类: 易语言 标签: