写模块的方向通用型目录浏览

易语言 2020-02-24 19:51:21

写模块的方向通用型目录浏览

.子程序 目录_浏览, 通用型, 公开, 浏览文件夹内支持创建文件夹 支持显示文件 编辑框 (返回被选择文件或文件夹路径),第一个参数为字节集则返回字节集,文本则返回文本,如果第一个参数和第三个为空则返回文本型
.参数 标题, 通用型, 参考 可空, 设置标题,如果该值为字节集,那返回值为字节集Unicode编码,支持A版和W版,传入字节集将视为W版,支持传入 文本型/指针,字节集/指针,字节集指针请指向数组维数那里,取数据_通用型() 获取
.参数 显示文件, 逻辑型, 可空, 默认为假。
.参数 初始目录, 通用型, 参考 可空, 设置一个初始目录,默认为系统桌面,如果该值为字节集,那返回值为字节集Unicode编码,支持A版和W版,传入字节集将视为W版,支持传入 文本型/指针,字节集/指针,字节集指针请指向数组维数那里,取数据_通用型() 获取
.参数 地址栏, 逻辑型, 可空, 是否包含编辑框,可编辑,默认为假
.参数 新样式, 逻辑型, 可空, 有新建按钮及右键菜单,默认为真
.参数 父窗口句柄, 整数型, 可空
.参数 回调事件, 整数型, 可空, 无返回值, 回调事件(对话框句柄,消息类型,参数1,参数2),参数1和参数2根据不同的消息类型会有不同的值,其中常用的消息,1=初始化完毕,2=用户选择了某个项目,3=用户输入了错误的路径
.局部变量 szStr, 文本型
.局部变量 wzStr, 字节集
.局部变量 Type, 整数型
.局部变量 bi, BROWSEINFO
.局部变量 bin, 字节集
.局部变量 len, 整数型
.局部变量 wzCaption, 字节集
.局部变量 flag, 整数型
.局部变量 wzPath, 字节集
.局部变量 nTmp, 整数型, , , 临时记录变量类型
.局部变量 pIDl, 整数型
.局部变量 pMem, 整数型

' 就因为受不了操作系统支持库!
szStr = “ ” ' 要手动赋值,然后整个就是 [ebp-4]
wzStr = { } ' [ebp-8]
Type = #数据类型_空类型

.判断开始 (取反 (参数_是否为空 (1))) ' 标题不为空
flag = _取变量数据 (标题, wzCaption)
.如果真 (flag = 0) ' 传入的不是文本型也不是字节集,也不是文本型或字节集指针
wzCaption = A2W (“请选择一个文件夹”, )
.如果真结束

.默认
wzCaption = A2W (“请选择一个文件夹”, )
.判断结束

.如果真 (取反 (参数_是否为空 (5))) ' 初始目录不为空
nTmp = _取变量数据 (初始目录, wzPath)
.如果真结束

.如果真 (flag = 0) ' 走到这的时候第一个和第三个参数都取了值和返回类型, 如果flag不为0的话,那就使用第一个参数类型作为返回值
.判断开始 (nTmp = 0)
flag = #文本型 ' 第一个参数为空,且第三个参数为空,默认返回文本型
.默认
flag = nTmp ' 否则就以第三个参数的类型作为返回值
.判断结束

.如果真结束

新样式 = 选择 (是否为空 (新样式), 真, 新样式)
显示文件 = 选择 (是否为空 (显示文件), 假, 显示文件)
bi.hOwner = 父窗口句柄
bi.lpszTitle = 取指针_字节集型 (wzCaption)
bi.lpfn = 到整数 (&回调函数)
bi.ulFlags = 位或 (选择 (地址栏, #BIF_EDITBOX, 0), 选择 (新样式, #BIF_NEWDIALOGSTYLE, 0), 选择 (显示文件, #BIF_BROWSEINCLUDEFILES, 0))
pMem = LocalAlloc (#LMEM_ZEROINIT, 12) ' 记录几个参数,传递到回调里,+0是初始目录,+4是返回类型,+8是回调地址
__set (pMem, 0, 取指针_字节集型 (wzPath))
__set (pMem, 4, flag)
__set (pMem, 8, 回调事件)
bi.lParam = pMem ' 传递到回调函数里

pIDl = SHBrowseForFolderW (取数据_通用型 (bi))
LocalFree (pMem)

.如果真 (pIDl ≠ 0) ' 调用成功,进入下一步
bin = 取空白字节集 (#MAX_PATH × 2) ' Unicode需要多一倍的字节数
SHGetPathFromIDListW (pIDl, 取指针_字节集型 (bin))
.如果真结束

.判断开始 (flag = #文本型)
szStr = W2A (bin, )
Type = #数据类型_文本型
置入代码 ({ 139, 69, 252, 139, 77, 244, 201, 194, 4, 0 })
' mov eax,[ebp-4]
' mov ecx,[ebp-12]
' leave
' ret 4
.默认
Type = #数据类型_字节集
wzStr = 取字节集左边 (bin, lstrlenW (取指针_字节集型 (bin)) × 2 + 2)
置入代码 ({ 139, 69, 248, 139, 77, 244, 201, 194, 4, 0 })
' mov eax,[ebp-8]
' mov ecx,[ebp-12]
' leave
' ret 4
.判断结束
返回 (0)