当前位置: 主页 > 百科 > 计算机编程 > 易语言源码 >
-12 Comments

UDISK的源码

发布于:2016-07-05  |   作者:http://www.zxjsq.net  |   已聚集:人围观

.版本 2

.支持库 shell

.支持库 spec

.支持库 iext

.程序集变量 分区列表数组, 文本型, , "0"

.程序集变量 盘号, 整数型

.程序集变量 U盘列表数组, 文本型, , "0"

.程序集变量 U盘标记, 整数型


.子程序 __启动窗口_创建完毕

.局部变量 分区列表, 文本型

.局部变量 wjh, 整数型


.判断开始 (系统版本 () = 5)

    标签1.标题 = “Windows 2000”

.判断 (系统版本 () = 6)

    标签1.标题 = “Windows XP”

.判断 (系统版本 () = 7)

    标签1.标题 = “Windows 2003”

.判断 (系统版本 () = 8)

    标签1.标题 = “Windows Vista”

.判断 (系统版本 () = 9)

    标签1.标题 = “Windows 7”

.判断 (系统版本 () = 10)

    标签1.标题 = “Windows 8”

.判断 (系统版本 () = 11)

    标签1.标题 = “Windows 8.1”

.默认

    标签1.标题 = “未知操作系统”

.判断结束


.计次循环首 (hddnum (), 盘号)

    wjh = 打开文件 (取特定目录 (3) + “list.txt”, 4, )

    写出文本 (wjh, “select disk ” + 到文本 (盘号 - 1) + #换行符 + “detail disk” + #换行符)

    关闭文件 (wjh)

    分区列表 = edosecho (“diskpart /s ” + 取特定目录 (3) + “list.txt”)

    .判断开始 (寻找文本 (分区列表, “请选择一个磁盘”, , 假) ≠ -1)

        .如果真 (U盘标记 = 0)

            U盘列表 ()

        .如果真结束

        U盘标记 = U盘标记 + 1

        U盘型 ()

    .默认

        分区列表数组 = 分割文本 (分区列表, “卷”, )

        删除成员 (分区列表数组, 1, 2)

        硬盘型 ()

    .判断结束


.计次循环尾 ()

删除文件 (取特定目录 (3) + “list.txt”)

' 调试输出 (edosecho (“fsutil fsinfo drivetype L:”))


.子程序 系统版本, 整数型, , 0.未知 1.Win95 2.Win98 3.WinME 4.WinNT 5.Win2000 6.WinXP 7.Win2003 8.Vista 9.Win7 10.Win8 11.Win8.1


置入代码 ({ 83, 51, 192, 100, 139, 29, 24, 0, 0, 0, 100, 139, 13, 48, 0, 0, 0, 133, 201, 121, 32, 185, 0, 0, 83, 0, 57, 75, 88, 117, 4, 176, 1, 235, 99, 57, 75, 84, 117, 4, 176, 2, 235, 90, 57, 75, 124, 117, 85, 176, 3, 235, 81, 139, 153, 168, 0, 0, 0, 139, 137, 164, 0, 0, 0, 131, 249, 4, 119, 4, 176, 4, 235, 60, 131, 249, 5, 117, 27, 131, 251, 0, 117, 4, 176, 5, 235, 46, 131, 251, 1, 117, 4, 176, 6, 235, 37, 131, 251, 2, 117, 4, 176, 7, 235, 28, 131, 249, 6, 117, 7, 131, 251, 0, 117, 4, 176, 8, 235, 14, 131, 251, 1, 117, 2, 176, 9, 131, 251, 2, 117, 2, 176, 10, 131, 251, 3, 117, 2, 176, 11, 91, 139, 229, 93, 195 })

返回 (0)


.子程序 U盘列表

.局部变量 次, 整数型

.局部变量 分区列表, 文本型

.局部变量 次1, 整数型

.局部变量 文本, 文本型

.局部变量 wjh, 整数型


wjh = 打开文件 (取特定目录 (3) + “list.txt”, 4, )

写出文本 (wjh, “list volume” + #换行符)

关闭文件 (wjh)

分区列表 = edosecho (“diskpart /s ” + 取特定目录 (3) + “list.txt”)


分区列表数组 = 分割文本 (分区列表, “卷”, )

删除成员 (分区列表数组, 1, 2)

.计次循环首 (取数组成员数 (分区列表数组), 次)

    .如果真 (寻找文本 (分区列表数组 [次], “可移动”, , 假) ≠ -1)

        文本 = 子文本替换 (删首尾空 (分区列表数组 [次]), “ ”, “|”, , , 真)

        .计次循环首 (取文本长度 (分区列表数组 [次]), 次1)

            文本 = 子文本替换 (文本, “||”, “|”, , , 真)

            .如果真 (寻找文本 (文本, “||”, , 假) = -1)

                跳出循环 ()

            .如果真结束


        .计次循环尾 ()

        加入成员 (U盘列表数组, 文本)

    .如果真结束


.计次循环尾 ()

清除数组 (分区列表数组)

调试输出 (U盘列表数组)


.子程序 U盘型

.局部变量 最终数组, 文本型, , "0"

.局部变量 x, 整数型


最终数组 = 分割文本 (U盘列表数组 [U盘标记], “|”, )

调试输出 (最终数组)

x = 超级列表框1.插入表项 (, “hd” + 到文本 (盘号 - 1) + “,1”, , , , )

超级列表框1.置标题 (x, 1, 最终数组 [2])

超级列表框1.置标题 (x, 2, “可移动磁盘”)

.判断开始 (最终数组 [3] = “可移动”)

    超级列表框1.置标题 (x, 3, 最终数组 [4] + 最终数组 [5])

.默认

    超级列表框1.置标题 (x, 3, 最终数组 [5] + 最终数组 [6])

.判断结束



.子程序 硬盘型

.局部变量 次, 整数型

.局部变量 次1, 整数型

.局部变量 文本, 文本型

.局部变量 最终数组, 文本型, , "0"

.局部变量 x, 整数型


.计次循环首 (取数组成员数 (分区列表数组), 次)

    .如果真 (寻找文本 (分区列表数组 [次], “正常”, , 假) = -1 且 寻找文本 (分区列表数组 [次], “状态良好”, , 假) = -1)

        到循环尾 ()

    .如果真结束

    文本 = 子文本替换 (删首尾空 (分区列表数组 [次]), “ ”, “|”, , , 真)

    .计次循环首 (取文本长度 (分区列表数组 [次]), 次1)

        文本 = 子文本替换 (文本, “||”, “|”, , , 真)

        .如果真 (寻找文本 (文本, “||”, , 假) = -1)

            跳出循环 ()

        .如果真结束


    .计次循环尾 ()

    最终数组 = 分割文本 (文本, “|”, )

    x = 超级列表框1.插入表项 (, “hd” + 到文本 (盘号 - 1) + “,” + 到文本 (次), , , , )

    超级列表框1.置标题 (x, 1, 最终数组 [2])

    超级列表框1.置标题 (x, 2, 最终数组 [4])

    .判断开始 (最终数组 [3] = “磁盘分区” 或 最终数组 [3] = “可移动”)

        超级列表框1.置标题 (x, 3, 最终数组 [4] + 最终数组 [5])

        .如果真 (取数组成员数 (最终数组) = 8)

            超级列表框1.置标题 (x, 4, 最终数组 [7])

        .如果真结束


    .默认

        超级列表框1.置标题 (x, 3, 最终数组 [5] + 最终数组 [6])

        .如果真 (取数组成员数 (最终数组) = 9)

            超级列表框1.置标题 (x, 4, 最终数组 [8])

        .如果真结束


    .判断结束

    清除数组 (最终数组)

.计次循环尾 ()

清除数组 (分区列表数组)



.子程序 edosecho, 文本型

.参数 Command, 文本型

.局部变量 回显, 文本型

.局部变量 SECURITY_ATTRIBUTES, SECURITY_ATTRIBUTES

.局部变量 STARTUPINFO, STARTUPINFO

.局部变量 PROCESS_INFORMATION, PROCESS_INFORMATION

.局部变量 hWrite, 整数型

.局部变量 hRead, 整数型

.局部变量 txt, 字节集

.局部变量 len, 整数型

.局部变量 EXIT, 整数型


SECURITY_ATTRIBUTES.nLength = 12

SECURITY_ATTRIBUTES.lpSecurityDescriptor = 0

SECURITY_ATTRIBUTES.bInheritHandle = 1

CreatePipe (hRead, hWrite, SECURITY_ATTRIBUTES, 0)  ' 创建一个匿名管道

STARTUPINFO.cb = 68

STARTUPINFO.dwFlags = 位或 (#STARTF_USESHOWWINDOW, #STARTF_USESTDHANDLES)

STARTUPINFO.wShowWindow = #SW_HIDE

STARTUPINFO.hStdOutput = hWrite

STARTUPINFO.hStdError = hWrite

.如果 (取操作系统类别 () ≤ 2)

    CreateProcess (0, “command.com /c ” + Command, 0, 0, 真, 0, 0, 0, STARTUPINFO, PROCESS_INFORMATION)  ' 创建一个新进程,并且设置读写管道,创建成功后,进程会自动再创建一个写管道端口

.否则

    CreateProcess (0, “cmd.exe /c ” + Command, 0, 0, 真, 0, 0, 0, STARTUPINFO, PROCESS_INFORMATION)  ' 创建一个新进程,并且设置读写管道,创建成功后,进程会自动再创建一个写管道端口

.如果结束


CloseHandle (hWrite)  ' 因为我们开始已经创建了一个写管道端口,现在进程创键时又自动创键了一个写管道端口,所以应关闭多余的管道写端口

.判断循环首 (len ≠ -1)  ' 制造一个无限循环

    PeekNamedPipe (hRead, 0, 0, 0, len, 0)  ' 查看管道中是否有数据

    .如果 (len ≠ 0)

        txt = 取空白字节集 (1024)

        ReadFile (hRead, txt, 1023, len, 0)  ' 从管道中读取数据

        回显 = 回显 + 取字节集数据 (txt, #文本型, )

    .否则

        GetExitCodeProcess (PROCESS_INFORMATION.hProcess, EXIT)  ' 查看指定进程是否已结束

        .如果真 (EXIT ≠ #STILL_ACTIVE)  ' 因为会有程序退出来了,但管道中还有数据的情况,所以必须在管道中没有数据的情况下判断程序是否已结束,这时才能中止循环!

            CloseHandle (hRead)  ' 关闭管道

            跳出循环 ()

        .如果真结束


    .如果结束

    处理事件 ()

.判断循环尾 ()

返回 (回显)



.子程序 hddnum, 整数型

.局部变量 objWbemLocator, 对象

.局部变量 objWMIService, 对象

.局部变量 ISWbemObjectSet, 对象

.局部变量 ISWbemObject, 对象

.局部变量 硬盘数量, 整数型


objWbemLocator.创建 (“WbemScripting.SWbemLocator”, )

objWMIService = objWbemLocator.对象型方法 (“ConnectServer”, “.”, “root\CIMV2”, , , , , , )

ISWbemObjectSet = objWMIService.对象型方法 (“InstancesOf”, “Win32_DiskDrive”)

硬盘数量 = ISWbemObjectSet.读数值属性 (“count”, )

返回 (硬盘数量)


标签:                   喜欢:收藏