|
本帖最后由 hdxzd 于 2025-1-22 16:06 编辑
友情提示:需要准备7z.exe,7z.dll和pecmd
.版本 2
.程序集 程序集1
.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
.局部变量 a, 文本型, , "0"
取命令行 (a)
创建目录EX (“X:\Program Files\Edgeless\安装程序”)
.如果真 (取数组成员数 (a) = 1)
子程序1 (a [1])
结束 ()
.如果真结束
标准输出 (, “输入Edgeless插件包所在文件夹或文件:”)
子程序1 (标准输入 ())
结束 ()
返回 (0) ' 可以根据您的需要返回任意数值
.子程序 子程序1
.参数 文件路径, 文本型
.局部变量 文件名, 文本型, , "0"
.局部变量 a, 整数型
.如果 (文件_是否为目录 (文件路径))
改变目录 (“X:\Program Files\Edgeless\”)
文件_枚举 (文件路径, “*.7z”, 文件名, 真, )
.计次循环首 (取数组成员数 (文件名), a)
运行 (“7z x ” + #引号 + 文件路径 + #引号 + “ ” + #引号 + “-oX:\Program Files\Edgeless\” + #引号 + “ -y”, 真, )
.计次循环尾 ()
文件_枚举 (“X:\Program Files\Edgeless\”, “*.cmd”, 文件名, 假, )
.计次循环首 (取数组成员数 (文件名), a)
运行 (文件名 [a], 真, )
文件_移动 (文件名 [a], “X:\Program Files\Edgeless\安装程序\” + 文件_取文件名 (文件名 [a], 真))
.计次循环尾 ()
文件_枚举 (“X:\Program Files\Edgeless\”, “*.wcs”, 文件名, 真, )
.计次循环首 (取数组成员数 (文件名), a)
运行 (“PECMD.EXE LOAD ” + #引号 + 文件名 [a] + #引号, 真, )
文件_移动 (文件名 [a], “X:\Program Files\Edgeless\安装程序\” + 文件_取文件名 (文件名 [a], 真))
.计次循环尾 ()
结束 ()
' \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
.否则
运行 (“7z x ” + #引号 + 文件路径 + #引号 + “ ” + #引号 + “-oX:\Program Files\Edgeless\” + #引号 + “ -y”, 真, )
改变目录 (“X:\Program Files\Edgeless\”)
文件_枚举 (“X:\Program Files\Edgeless\”, “*.cmd”, 文件名, 假, )
.计次循环首 (取数组成员数 (文件名), a)
运行 (“PECMD.EXE EXEC ” + #引号 + 文件名 [a] + #引号, 真, )
文件_移动 (文件名 [a], “X:\Program Files\Edgeless\安装程序\” + 文件_取文件名 (文件名 [a], 真))
.计次循环尾 ()
文件_枚举 (“X:\Program Files\Edgeless\”, “*.wcs”, 文件名, 真, )
.计次循环首 (取数组成员数 (文件名), a)
运行 (“PECMD.EXE LOAD ” + #引号 + 文件名 [a] + #引号, 真, )
文件_移动 (文件名 [a], “X:\Program Files\Edgeless\安装程序\” + 文件_取文件名 (文件名 [a], 真))
.计次循环尾 ()
结束 ()
.如果结束
结束 ()
.版本 2
.程序集 程序集2
.子程序 文件_枚举, 整数型, 公开, 枚举某个目录下的指定类型文件;成功返回文件数量;
.参数 欲寻找的目录, 文本型, , 文件目录
.参数 欲寻找的文件名, 文本型, , 如果寻找全部文件可以填入*.*,或*.txt只找txt文件
.参数 文件数组, 文本型, 参考 可空 数组, 用于装载文件数组的变量;把寻找到的文件都放在这个数组里,并返回;
.参数 是否带路径, 逻辑型, 可空, 默认为假; 真=带目录路径,如C:\012.txt; 假=不带,如 012.txt;
.参数 是否按字母排序, 逻辑型, 可空, 默认为假;真=按字母a-z排序 假=不排序
.局部变量 局_文件名, 文本型
.局部变量 局_目录, 文本型
清除数组 (文件数组)
局_目录 = 欲寻找的目录
.如果真 (取文本右边 (局_目录, 1) ≠ “\”)
局_目录 = 局_目录 + “\”
.如果真结束
局_文件名 = 寻找文件 (局_目录 + 欲寻找的文件名, )
.判断循环首 (局_文件名 ≠ “”)
.如果 (是否带路径)
加入成员 (文件数组, 局_目录 + 局_文件名)
.否则
加入成员 (文件数组, 局_文件名)
.如果结束
系统_处理事件1 ()
局_文件名 = 寻找文件 (, )
.判断循环尾 ()
.如果真 (是否按字母排序)
数组_排序 (文件数组, 0, )
.如果真结束
返回 (取数组成员数 (文件数组))
.子程序 系统_处理事件1, , 公开, 暂时转让控制权,以便让 Windows 操作系统有机会处理其它的如用户键盘或鼠标输入等事件。直到操作系统处理并发送完程序队列中的所有事件后,命令才会返回。
.局部变量 CurrMsg, MSG
.判断循环首 (PeekMessageA (CurrMsg, 0, 0, 0, 1)) ' #PM_REMOVE=1接收消息并从队列里除掉。
TranslateMessage (CurrMsg)
DispatchMessageA (CurrMsg) ' 分发消息
.判断循环尾 ()
.子程序 数组_排序, , 公开, 二分法排序.只能对文本数组进行排序,整数数组请用核心支持库的.
.参数 要排序的数组, 文本型, 参考 数组
.参数 排序方式, 字节型, 可空, 可空,默认为0 0=升序排序 1=降序排序
.参数 区分大小写, 逻辑型, 可空, 可空,默认“真”。真=区分大小写,假=不区分
.局部变量 N, 整数型
.局部变量 排序数组, 文本型, , "0"
.局部变量 成员数量, 整数型
.局部变量 高位, 整数型
.局部变量 低位, 整数型
.局部变量 中间位, 整数型
.局部变量 比较结果, 整数型, , , 感谢会员 落雪 提供代码
复制数组 (排序数组, 要排序的数组)
清除数组 (要排序的数组)
.如果真 (是否为空 (区分大小写) = 真)
区分大小写 = 真
.如果真结束
.计次循环首 (取数组成员数 (排序数组), N)
.判断开始 (成员数量 = 0)
插入成员 (要排序的数组, 1, 排序数组 [N])
.默认
高位 = 成员数量
低位 = 1
中间位 = (高位 + 低位) \ 2
' ; API_lstrcmp 通过比较ASCII码进行文本的排序,速度快
.判断开始 (区分大小写 = 假)
比较结果 = lstrcmpA (到大写 (排序数组 [N]), 到大写 (要排序的数组 [成员数量])) ' 不区分就都算大写好了.因为在ACSII码中,大小写字母都是挨着的,所以不会出现"夹"在中间的字符.
.默认
比较结果 = lstrcmpA (排序数组 [N], 要排序的数组 [成员数量])
.判断结束
.判断开始 (比较结果 ≥ 0)
插入成员 (要排序的数组, 成员数量 + 1, 排序数组 [N])
.判断 (lstrcmpA (排序数组 [N], 要排序的数组 [1]) ≤ 0)
插入成员 (要排序的数组, 1, 排序数组 [N])
.默认
.判断循环首 (高位 - 低位 > 1)
.如果真 (排序数组 [N] = 要排序的数组 [中间位])
跳出循环 ()
.如果真结束
.如果 (lstrcmpA (排序数组 [N], 要排序的数组 [中间位]) < 0)
高位 = 中间位
.否则
低位 = 中间位
.如果结束
中间位 = (高位 + 低位) \ 2
.判断循环尾 ()
.判断开始 (lstrcmpA (排序数组 [N], 要排序的数组 [中间位]) ≤ 0)
插入成员 (要排序的数组, 中间位, 排序数组 [N])
.默认
插入成员 (要排序的数组, 中间位 + 1, 排序数组 [N])
.判断结束
.判断结束
.判断结束
成员数量 = 取数组成员数 (要排序的数组)
.计次循环尾 ()
.如果真 (排序方式 = 1)
数组_反转 (要排序的数组)
.如果真结束
.子程序 创建目录EX, 整数型, 公开, 创建多级目录“D:\1\2\3\4\5”不需要中间一个个创建
.参数 pszPath, 文本型, , 目录的标准路径,最大长度为248-1个字符
返回 (SHCreateDirectoryExA (0, pszPath, 0))
.子程序 数组_反转, , 公开, 数组倒序。数组的第一个成员与最后一个成员互换,第二个和倒数第二个互换,以此类推
.参数 反转的数组, 文本型, 参考 数组
.局部变量 成员数量, 整数型
.局部变量 折中数量, 整数型
.局部变量 临时成员, 文本型
.局部变量 N, 整数型
成员数量 = 取数组成员数 (反转的数组)
折中数量 = 成员数量 ÷ 2
.计次循环首 (折中数量, N)
临时成员 = 反转的数组 [N]
反转的数组 [N] = 反转的数组 [成员数量]
反转的数组 [成员数量] = 临时成员
成员数量 = 成员数量 - 1
.计次循环尾 ()
.子程序 文件_是否为目录, 逻辑型, , 判断一个路径是否为目录 是目录返回真 是文件或者不存在则返回假
.参数 文件路径, 文本型
.如果真 (文件是否存在 (文件路径) = 假)
返回 (假)
.如果真结束
返回 (位与 (取文件属性 (文件路径), #子目录) ≠ 0)
.子程序 目录_是否存在, 逻辑型, 公开, 输入一个目录名,判断此目录是否存在
.参数 欲判断的目录名, 文本型, , 传入的目录名不会被改变
返回 (PathIsDirectoryA (欲判断的目录名))
.子程序 文件_移动, 逻辑型, 公开, 移动指定文件到指定的文件位置
.参数 欲移动的文件名, 文本型, , 欲移动的文件名
.参数 移动到的文件名, 文本型, , 移动到的文件名
返回 (MoveFileA (欲移动的文件名, 移动到的文件名))
.子程序 文件_取文件名, 文本型, 公开, 如:局_项数组:\123.exe 成功返回123
.参数 路径文件名, 文本型, , 文件完整地址
.参数 是否带后缀, 逻辑型, 可空, 默认为假,不带后缀;真为带后缀
.局部变量 局_文件名, 文本型
局_文件名 = PathFindFileNameA (路径文件名)
.如果真 (取文本右边 (局_文件名, 1) = “\”)
' 取出来了一个\,这表示不正确,返回空
返回 (“”)
.如果真结束
返回 (选择 (是否带后缀, 局_文件名, 取文本左边 (局_文件名, 取文本长度 (局_文件名) - 取文本长度 (文件_取扩展名 (局_文件名)))))
.子程序 文件_取扩展名, 文本型, 公开, 返回一个文件的后缀名,如:.jpg 如果没有后缀,返回空
.参数 文件名, 文本型, , 需要处理的原始文件名
返回 (PathFindExtensionA (文件名))
.版本 2
.数据类型 MSG
.成员 hwnd, 整数型
.成员 message, 整数型
.成员 wParam, 整数型
.成员 lParam, 整数型
.成员 time, 整数型
.成员 pt, POINT
.数据类型 POINT, , -
.成员 x, 整数型, , , 横坐标
.成员 y, 整数型, , , 纵坐标
.版本 2
.DLL命令 PathIsDirectoryA, 逻辑型, "shlwapi", "PathIsDirectoryA"
.参数 pszPath, 文本型, , 0
.DLL命令 PeekMessageA, 逻辑型, "user32", "PeekMessageA", , 该函数为一个消息检查线程消息队列,并将该消息(如果存在)放于指定的结构。
.参数 lpMsg, MSG, , 0
.参数 hWnd, 整数型, , 0
.参数 wMsgFilterMin, 整数型, , 0
.参数 wMsgFilterMax, 整数型, , 0
.参数 wRemoveMsg, 整数型, , 0
.DLL命令 lstrcmpA, 整数型, "kernel32", "lstrcmpA"
.参数 lpString1, 文本型, , 0
.参数 lpString2, 文本型, , 0
.DLL命令 TranslateMessage, 整数型, "user32", "TranslateMessage", , 转换虚拟关键字消息
.参数 lpMsg, MSG
.DLL命令 DispatchMessageA, 长整数型, "user32", "DispatchMessageA"
.参数 a1, MSG, , 0
.DLL命令 SHCreateDirectoryExA, 整数型, "shell32.dll", "SHCreateDirectoryExA", 公开, 创建一个具有可选安全性属性的新文件系统文件夹
.参数 hwnd, 整数型, , NULL
.参数 pszPath, 文本型, , 目录的标准路径,最大长度为248-1个字符
.参数 psa, , , NULL
.DLL命令 MoveFileA, 逻辑型, "kernel32.dll", "MoveFileA", , 移动文件。如dwFlags设为零,则MoveFile完全等价于MoveFileEx,非零表示成功,零表示失败。会设置GetLastError
.参数 lpExistingFileName, 文本型, , 欲移动的文件名
.参数 lpNewFileName, 文本型, , 新文件名
.DLL命令 PathFindFileNameA, 文本型, "shlwapi.dll", "PathFindFileNameA", , 文件路径取文件名
.参数 pszPath, 文本型, , 要取文件名的文件路径
.DLL命令 PathFindExtensionA, 文本型, "shlwapi.dll", "PathFindExtensionA", , 获取绝对路径或文件名中的文件扩展名。如果扩展名找到则返回pszPath字符串中“.”所在地址,否则返回空字符结尾地址。
.参数 pszPath, 文本型, , 指向以0结尾,最大长度为MAX_PATH文件路径字符串指针。备注:一个有效的扩展名是不包括空格的。
|
|