要易语言自,动更新源码?(这个,你去找吴涛要要看,不知道他给你不……)
要自动更新,易语言源码?(这个……进度下载模块,写成DLL 更新的时候调用 你自己研究去吧)
———————————————我是分割线《念青&卓越》———————————————
.版本 2
.程序集 程序集1
.子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码
_临时子程序 () ' 在初始化代码执行完毕后调用测试代码
返回 (0) ' 可以根据您的需要返回任意数值
.子程序 _临时子程序
' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
.子程序 下载进度事件模板, , 公开
.参数 下载文件名, 文本型
.参数 文件尺寸, 整数型, , Bit
.参数 下载速度, 整数型, , KB/S
.参数 下载进度, 整数型
.子程序 下载状态事件模板, , 公开
.参数 欲读入网址, 文本型
.参数 错误代码, 整数型
.参数 状态文本, 文本型
.参数 下载进度, 整数型
———————————————我是分割线《念青&卓越》———————————————
.版本 2
.程序集 HTTP进度下载类, , 公开
.程序集变量 XML对象, 对象
.程序集变量 已初始化, 逻辑型
.程序集变量 集_欲读入网址, 文本型
.程序集变量 集_引用页, 文本型
.程序集变量 集_数据块超时, 整数型
.程序集变量 集_错误信息, 文本型
.程序集变量 集_保存文件名, 文本型
.程序集变量 状态_开始下载, 逻辑型
.程序集变量 集_已下载尺寸, 整数型
.程序集变量 集_下载进度事件指针, 整数型
.程序集变量 集_下载状态事件指针, 整数型
.程序集变量 集_文件总尺寸, 整数型
.程序集变量 集_停止, 逻辑型
.程序集变量 集_数据块尺寸, 整数型
.子程序 _销毁, , , 当基于本类的对象被销毁前,此方法会被自动调用
清除 ()
.子程序 清除, , 公开, 清空HTTP下载类
停止下载 ()
XML对象.清除 ()
连续赋值 (假, 已初始化, 状态_开始下载, 集_停止)
连续赋值 (0, 集_数据块超时, 集_已下载尺寸, 集_下载进度事件指针, 集_下载状态事件指针, 集_文件总尺寸, 集_数据块尺寸)
连续赋值 (“”, 集_保存文件名, 集_错误信息, 集_引用页, 集_欲读入网址)
.子程序 初始化, 逻辑型, 公开, 当基于本类的对象被创建后,此方法会被自动调用
.参数 下载进度事件指针, 子程序指针, 可空
.参数 下载状态事件指针, 子程序指针, 可空
.判断开始 (已初始化 = 假 且 状态_开始下载 = 假)
XML对象.创建 (“MSXML2.ServerXMLHTTP”, )
.判断开始 (XML对象.是否为空 ())
返回 (假)
.默认
已初始化 = 真
状态_开始下载 = 假
集_下载进度事件指针 = 到数值 (下载进度事件指针)
集_下载状态事件指针 = 到数值 (下载状态事件指针)
集_文件总尺寸 = 0
集_停止 = 假
集_数据块尺寸 = #数据块尺寸
集_数据块超时 = 集_数据块尺寸 ÷ #最低网速
返回 (真)
.判断结束
.默认
返回 (假)
.判断结束
.子程序 置缓冲区尺寸, , 公开, 如果不用本方法设置缓冲区大小,将默认为10KB。不要过小,太小了会因读写次数增多而影响速度;过大了则等待数据的时间会过长;应根据网络状态合理设置。
.参数 缓冲区尺寸, 字节型, , 单位为KB
.如果真 (已初始化 且 状态_开始下载 = 假)
.如果真 (缓冲区尺寸 = 0)
缓冲区尺寸 = 4
.如果真结束
集_数据块尺寸 = 缓冲区尺寸 × 1024
集_数据块超时 = 集_数据块尺寸 ÷ #最低网速
.如果真结束
.子程序 Http网址, , 公开
.参数 欲读入网址, 文本型
.参数 引用页, 文本型, 可空
.如果真 (已初始化 且 状态_开始下载 = 假)
集_欲读入网址 = 欲读入网址
集_引用页 = 引用页
.如果真结束
.子程序 置保存文件名, 逻辑型, 公开
.参数 文件名, 文本型
.如果真 (已初始化 且 状态_开始下载 = 假)
集_保存文件名 = 文件名
返回 (真)
.如果真结束
返回 (假)
.子程序 开始下载, 逻辑型, 公开
.局部变量 字节集数据, 字节集
.局部变量 数据块开始下载时间, 整数型
.局部变量 文件号, 整数型
.局部变量 网页文件读写及尺寸信息, 文本型
.局部变量 temp, 整数型
.局部变量 当前读写位置, 整数型
.局部变量 下载速度, 整数型
.局部变量 已下载的百分比, 整数型
.局部变量 集_下载起点, 整数型
.局部变量 status, 整数型
.如果真 (已初始化 = 假)
集_错误信息 = “没有初始化”
发送状态事件 ()
返回 (假)
.如果真结束
.如果真 (状态_开始下载)
集_错误信息 = “正在下载中……”
发送状态事件 ()
返回 (假)
.如果真结束
文件号 = 打开文件 (集_保存文件名, #改写, #禁止读写)
.如果真 (文件号 = 0)
集_错误信息 = “本地文件无法打开”
发送状态事件 ()
返回 (假)
.如果真结束
集_下载起点 = 取文件长度 (文件号)
集_已下载尺寸 = 集_下载起点
移到文件尾 (文件号)
状态_开始下载 = 真
集_错误信息 = “”
集_停止 = 假
.循环判断首 ()
XML对象.方法 (“open”, “GET”, 集_欲读入网址, 真)
XML对象.方法 (“setRequestHeader”, “Referer”, 集_引用页)
XML对象.方法 (“setRequestHeader”, “Accept”, “*/*”)
XML对象.方法 (“setRequestHeader”, “User-Agent”, “Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)”)
XML对象.方法 (“setRequestHeader”, “Range”, “bytes=” + 到文本 (集_下载起点) + “-” + 到文本 (集_下载起点 + 集_数据块尺寸 - 1))
XML对象.方法 (“setRequestHeader”, “Content-Type”, “application/octet-stream”)
XML对象.方法 (“setRequestHeader”, “Pragma”, “no-cache”)
XML对象.方法 (“setRequestHeader”, “Cache-Control”, “no-cache”)
XML对象.方法 (“send”, )
数据块开始下载时间 = 取启动时间 ()
.判断循环首 (XML对象.读数值属性 (“readyState”, ) ≠ 4)
.如果真 (取启动时间 () - 数据块开始下载时间 > 集_数据块超时)
XML对象.方法 (“abort”, )
集_错误信息 = “数据下载超时,建议重试。”
关闭文件 (文件号)
发送状态事件 ()
清除下载信息 ()
返回 (假)
.如果真结束
.如果真 (集_停止)
集_错误信息 = “用户中止了下载”
关闭文件 (文件号)
发送状态事件 ()
清除下载信息 ()
返回 (假)
.如果真结束
XML对象.逻辑方法 (“waitForResponse”, 1000)
.判断循环尾 ()
' 检测状态
status = XML对象.读数值属性 (“status”, )
.如果真 (status > 299 且 status ≠ 416) ' http出错
集_错误信息 = XML对象.读文本属性 (“statusText”, )
跳出循环 ()
.如果真结束
.如果真 (status ≠ 206 且 status ≠ 416) ' 服务器不支持断点续传
集_错误信息 = “服务器不支持断点续传!”
跳出循环 ()
.如果真结束
写出字节集 (文件号, XML对象.读属性 (“responseBody”, ).取字节集 ())
网页文件读写及尺寸信息 = XML对象.文本方法 (“getResponseHeader”, “Content-Range”)
.判断开始 (网页文件读写及尺寸信息 = “”)
集_错误信息 = “文件长度未知!”
.默认
.如果真 (集_文件总尺寸 = 0)
集_文件总尺寸 = 到数值 (取文本右边 (网页文件读写及尺寸信息, 取文本长度 (网页文件读写及尺寸信息) - 倒找文本 (网页文件读写及尺寸信息, “/”, , 假)))
.如果真结束
当前读写位置 = 到数值 (取文本右边 (网页文件读写及尺寸信息, 取文本长度 (网页文件读写及尺寸信息) - 倒找文本 (网页文件读写及尺寸信息, “-”, , 假)))
集_已下载尺寸 = 集_已下载尺寸 + 当前读写位置 - 集_下载起点
.如果真 (集_已下载尺寸 > 集_文件总尺寸)
集_已下载尺寸 = 集_文件总尺寸
.如果真结束
集_下载起点 = 当前读写位置 + 1
已下载的百分比 = 集_已下载尺寸 × 100 ÷ 集_文件总尺寸
.判断结束
temp = 取启动时间 () - 数据块开始下载时间
下载速度 = 集_数据块尺寸 ÷ 1.024 ÷ temp
.如果真 (集_下载进度事件指针 ≠ 0)
CallWindowProc (集_下载进度事件指针, 集_保存文件名, 集_文件总尺寸, 下载速度, 已下载的百分比)
.如果真结束
.如果真 (集_文件总尺寸 = 集_已下载尺寸)
集_错误信息 = “下载完毕”
跳出循环 ()
.如果真结束
.如果真 (status = 416)
集_错误信息 = “下载完毕”
跳出循环 ()
.如果真结束
.循环判断尾 (集_停止 = 假)
关闭文件 (文件号)
发送状态事件 ()
清除下载信息 ()
返回 (集_错误信息 = “下载完毕”)
.子程序 清除下载信息
连续赋值 (假, 状态_开始下载, 集_停止)
连续赋值 (0, 集_已下载尺寸, 集_文件总尺寸)
.子程序 发送状态事件
.如果真 (集_下载状态事件指针 ≠ 0)
CallWindowProc2 (集_下载状态事件指针, 集_欲读入网址, XML对象.读数值属性 (“status”, ), 集_错误信息, 集_已下载尺寸 × 100 ÷ 集_文件总尺寸)
.如果真结束
.子程序 停止下载, , 公开
.如果真 (状态_开始下载)
集_停止 = 真
XML对象.方法 (“abort”, )
.如果真结束
———————————————我是分割线《念青&卓越》 调用系统API—————————
.版本 2
.DLL命令 CallWindowProc, 整数型, "user32.dll", "CallWindowProcA"
.参数 程序指针, 整数型
.参数 下载文件名, 文本型, 传址
.参数 文件尺寸, 整数型
.参数 下载速度, 整数型
.参数 下载进度, 整数型
.DLL命令 CallWindowProc2, 整数型, "user32.dll", "CallWindowProcA"
.参数 程序指针, 整数型
.参数 欲读入网址, 文本型, 传址
.参数 状态代码, 整数型
.参数 状态文本, 文本型
.参数 下载进度, 整数型
———————————————我是分割线《念青&卓越》常量 —————————————
.版本 2
.常量 数据块尺寸, "10240", , 10K/块
.常量 最低网速, "0.1", , KB/S
实例效果:
效果不是很好。也可以直接替换源文件。不使用窗口后台静默下载等等等等…… 楼主自由发挥吧!<念青&卓越>
什么?