『壹』 要易語言自動更新源碼
要易語言自,動更新源碼?(這個,你去找吳濤要要看,不知道他給你不……)
要自動更新,易語言源碼?(這個……進度下載模塊,寫成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;MSIE5.00;Windows98)」)
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
實例效果:
效果不是很好。也可以直接替換源文件。不使用窗口後台靜默下載等等等等……樓主自由發揮吧!<念青&卓越>
『貳』 易語言怎麼實現自動更新
我為了演示清除,就新建一個windos窗口程序。
在這個程序上畫:一個按鈕,這個按鈕到時候用來自動更新
四個標簽,用來說明版本。如圖
我們現在進入到網路空間,點擊「寫文字」
文字內容便照圖中排版,記得換行哦!
發布該文字成功後,進入到該文字的界面,復制該文字的地址
回到編程軟體中,我們新建一個叫文本型的「源碼」全局變數
我們在啟動窗口上雙擊,自動生成一個叫「__啟動窗口_創建完畢」的子程序,我這里是為了演示效果才創建的這個程序,你實際運用中可以不這樣編寫!
在該程序下面編寫代碼:
源碼=編碼_utf8到gb2312 (到文本 (HTTP讀文件 (「之前復制的地址」)))
意思是,把之前在空間復制的那個地址的網站源碼賦值給文本型「源碼」變數。
我們回到發布的文字網頁上,在網頁的空白處單擊滑鼠右鍵---->查看網頁源碼。
在源碼文件中找到「最新版本」那幾個字,我們來取「最新版本」後面的2.0。
然後找到最新版本號後面那代碼「</p>」。
因為精易模塊取出中間文本這個命令需要得到要取出內容的前後文本,所以我們找到2.0前後的文本。
我們把最新的版本號獲取到之後輸出到標簽4的標題中來,
找到後,在易語言中編寫以下代碼:
標簽4.標題 = 文本_取出中間文本 (源碼, 「最新版本:」, 「</p>」)
以上代碼就會取出「最新版本:」和「</p>」之間的「2.0」啦!
調試一下,查看是否能正常獲取到網站的源碼並取出想要得到內容。
獲取到版本號之後,接下來我們編寫自動更新。