PDA

View Full Version : [JX] [SHARE] Cách làm một Autoupdate bằng Autoit



thinkiem
02-09-16, 05:01 PM
Cái này mình cũng sưu tâm nên k rõ tường tận !! mình có chú thích bên trong code những thứ hiểu được !! nêu nếu ai thấy có thể lấy đc thì lấy ! không tiếp gạch đá nhé :P

Yêu cầu :

+ Phận mềm Autoit
+ Photoshop

Chỉ tưng đó thôi !! trong hình mình cũng có từng này file thôi :

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

còn đây là code :


#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <ProgressConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <InetConstants.au3>
#include <MsgBoxConstants.au3>
#include <IE.au3>
; Mấy dòng trên là khai báo thư viện ^_^ không nói chắc cũng biết
Opt("TrayAutoPause", 0) ; Tắt chế độ auto pause khi nhấn chuột vào icon ở chỗ dồng hồ
Opt("TrayMenuMode", 1) ; Tắt menu chuột phải ở icon
; Khai báo và khở động giao diện
Global $hGUI, $hImage, $hGraphic, $hImage
Global Const $SC_DRAGMOVE = 0xF012
_GDIPlus_Startup()
; Load PNG image chỗ này là lấy cái hình làm giao diện nè
$hImage = _GDIPlus_ImageLoadFromFile("gui.dat")
$iWidth = _GDIPlus_ImageGetWidth($hImage)
$iHeight = _GDIPlus_ImageGetHeight($hImage)



; Create GUI -> lệnh tạo giao diện, nút thoát
$hGUI = GUICreate("VLCA", $iWidth, $iHeight, -1, -1, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOPMOST)
$hGUI_child = GUICreate("", $iWidth, $iHeight, 0, 0, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOPMOST + $WS_EX_MDICHILD, $hGUI)
$hButton = GUICtrlCreateButton("Thoát", $iWidth * 2 / 3 + 15, $iHeight - 30, 70, 25)
GUISetBkColor(0xFFFFFF, $hGUI_child)

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
SetTransparentBitmap($hGUI, $hImage)
_WinAPI_SetLayeredWindowAttributes($hGUI_child, 0xFFFFFF, 0xff)

$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI_child)
_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2)

GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN")
;----------------------------------------------------------------------------------------------------------------------------------------
;Show Processbar khai báo 2 cái thanh tiến trình
;ProgressOn("Võ Lâm ...", "Kiểm tra cập nhật...", "0%")

Local $processbar1 = GUICtrlCreateProgress(20, $iHeight - 30, 240, 10) ;thanh thứ 1 -> thanh này là tiến trình của 1 file
Local $processbar = GUICtrlCreateProgress(20, $iHeight - 15, 240, 10) ;thanh thứ 2 -> tiến trình của tất cả các file
Local $idLabel = GUICtrlCreateLabel("Đang kiểm tra cập nhật...", 20, $iHeight - 45, 240) ; khai báo dòng chữ ngay trên thanh tiến trình tạm gọi là status
GUICtrlSetColor($idLabel, 0xFFFFFF0)
Local $oIE = _IECreateEmbedded () ; Chỗ này là khai báo chèn trang web vào
Local $GUIActiveX = GUICtrlCreateObj($oIE, 16, 124, 230, 328) ; định vị trí với kích thước cho cái khung
_IENavigate ($oIE, "launcher.php") ; địa chỉ web sẽ load trong cái khung
_IEHeadInsertEventScript ($oIE, "document", "oncontextmenu", "return false") ; chèn nội dung web
$oIE.document.body.scroll = "no" ; bỏ qua thanh cuộn web
$oIE.document.body.style.border = "0px" ; bỏ qua viền của web

; Save the downloaded file to the temporary folder. -. chỗ này là khai báo đường dẫn thư mục sẽ download về và đọc nhưng file trên mạng để download
Local $ServerListPath = "Settings\ServerList.ini"
Local $VersionPath = "Settings\Version.ini"
Local $ServerListURL = "<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>"
Local $VersionURL = "<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>"
Local $UpdateURL = "<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>"
Local $UpdateDIR = "<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>"
; Download the file by waiting for it to complete. The option of 'get the file from the local cache' has been selected.
Local $iBytesSize = InetGet($ServerListURL, $ServerListPath, $INET_FORCERELOAD) ; lệnh download file ServerList.ini để cập nhật ip của server

;///////////////////////////////////////////////////////////////////////////
; Read Version File -> đọc file version.ini để kiểm tra phiên bản hiện tại
Local $aInput
If not FileExists($VersionPath) then
Local $iBytesSize = InetGet($ServerListURL,$VersionPath , $INET_FORCERELOAD)
EndIf
_FileReadToArray($VersionPath, $aInput)
; Read Version Server -> đọc file version trên mạng để xem phiên bản mới nhất
Local $SV = BinaryToString(InetRead($VersionURL))
; Check new version -> kiểm tra xem 2 file đó có giống nhau ko nếu giống thì bỏ qua
if $aInput[1]<>$SV then ; Nếu khác nhau thì bắt đầu đọc những file cần cập nhật từ link đã khai báo ở trên
; Get list file to download
Local $Listupdate = BinaryToString(InetRead($UpdateURL))
Local $Savedir = BinaryToString(InetRead($UpdateDIR))
Local $aUpdate = StringSplit($Listupdate, "|")
Local $aSave = StringSplit($Savedir, "|")
Local $oneprocess = Round(99/$aUpdate[0]-1)
; Begin download file -. bắt đầu download các file mới nằm trong thư mục update trên host
For $i = 1 To UBound($aUpdate)-2
GUICtrlSetData ($idLabel,"Tải file: "&$aSave[$i]) ;Hiển thị đang tải file tên gì lên status
GUICtrlSetData($processbar, $oneprocess) ;thanh tiến trình về 0
Local $iBytesSize = InetGet($aUpdate[$i],$aSave[$i] , 1,1) ; chỗ này là lệnh download
$oneprocess = $oneprocess + $oneprocess ; phần trăm cho thanh tiến trình
Local $FileSize = InetGetSize($aUpdate[$i]) ;Get file size -> lấy dung lượng file để tính toán phần trăm đưa lên thanh tiến trình
While Not InetGetInfo($iBytesSize, 2) ;Loop until download is finished
Sleep(500) ;Sleep for half a second to avoid flicker in the progress bar
Local $BytesReceived = InetGetInfo($iBytesSize, 0) ;Get bytes received -> dung lượng đã download
Local $Pct = Int($BytesReceived / $FileSize * 100) ;Calculate percentage -> chia lấy phần trăm
;ProgressSet($Pct, $Pct & "%") ;Set progress bar
GUICtrlSetData($processbar1, $Pct) ; đặt phần trăm lên thanh tiến trình
WEnd
Next

EndIf

;///////////////////////////////////////////////////////////////////////////

; Update file version. -> sau khi download hết thì down luôn file version trên mạng về để lần sau kiểm tra sẽ là ản mới nhất -> không download lại
Local $iBytesSize = InetGet($VersionURL,$VersionPath , $INET_FORCERELOAD)
GUICtrlSetData($processbar1, 100) ;-> thanh tiến trình 100%
GUICtrlSetData($processbar, 100) ;-> như trên (2 thành mà)
GUICtrlSetData ($idLabel,"Hoàn thành. Nhấn nút bắt đầu để chơi game.") ;Status thành dòng thông báo Hoàn thành
Local $idButton = GUICtrlCreateButton("Bắt đầu", $iWidth * 2 / 3 -65, $iHeight - 30, 70, 25) ; Hiển thị nút "Bắt đầu"
; Run program Game.exe.
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
;Close Processbar
Sleep(1000) ; Nghĩ 1s để kịp xem load mọi thứ
ProgressOff() ; Kết thúc thanh tiến trình
;----------------------------------------------------------------------------------------------------------------------------------------
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $hButton ; Lệnh khi nhấn nút thoát
GUIRegisterMsg($WM_LBUTTONDOWN, "")
_GDIPlus_ImageDispose($hImage)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()
GUIDelete($hGUI)
ExitLoop
Case $GUI_EVENT_CLOSE, $idButton ; Lệnh khi nhấn nút bắt đầu
GUIRegisterMsg($WM_LBUTTONDOWN, "")
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
_GDIPlus_ImageDispose($hImage)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()
GUIDelete($hGUI)
ExitLoop
EndSwitch
WEnd
; Mấy cái dòng dưới này là để chỉnh sửa giao diện ví dụ như trong suốt, canh giữa màn hình... không quan tâm đến nữa!
Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
_SendMessage($hGUI, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
EndFunc ;==>_WM_LBUTTONDOWN

Func SetTransparentBitmap($hGUI, $hImage, $iOpacity = 0xFF)
Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
$hScrDC = _WinAPI_GetDC(0)
$hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
$hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
$tSize = DllStructCreate($tagSIZE)
$pSize = DllStructGetPtr($tSize)
DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
$tSource = DllStructCreate($tagPOINT)
$pSource = DllStructGetPtr($tSource)
$tBlend = DllStructCreate($tagBLENDFUNCTION)
$pBlend = DllStructGetPtr($tBlend)
DllStructSetData($tBlend, "Alpha", $iOpacity)
DllStructSetData($tBlend, "Format", 1)
_WinAPI_UpdateLayeredWindow($hGUI, $hMemDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
_WinAPI_ReleaseDC(0, $hScrDC)
_WinAPI_SelectObject($hMemDC, $hOld)
_WinAPI_DeleteObject($hBitmap)
_WinAPI_DeleteDC($hMemDC)
EndFunc ;==>SetTransparentBitmap



Lưu ý là trong thư mục Settings các bạn tạo 2 file ServerList.ini và Version.ini để auto kiểm tra nhé

VD :

Version.ini :



1.1



ServerList.ini :


[List]
RegionCount=2
Region_0=M¸y Chñ Vâ L©m
Region_1=TruyÒn Kú B¾c Nam

[Region_1]
Count=1
0_Title=D­îc S¬n
0_Address=192.168.1.123




PS: Thiếu 2 file PHPUpdateURL.php và UpdateDIR.php ở trên host nữa ! mình sẽ Update sau !!

khainqps01237
03-09-16, 05:12 AM
Ngon, up cho mau có file php nè \m/\m/\m/

chihochoi
03-09-16, 12:22 PM
bác cho em hỏi thử làm sao để lấy lưu lượng file trên host vs

em dùng hàm của bác mà get lưu lượng nó trả về 0

thinkiem
03-09-16, 04:35 PM
bác cho em hỏi thử làm sao để lấy lưu lượng file trên host vs

em dùng hàm của bác mà get lưu lượng nó trả về 0

mình có chú thích rồi đó !! mình chạy thấy vẫn bình thường mà ! bạn kiểm tra lại xem nhé !!


; Begin download file -. bắt đầu download các file mới nằm trong thư mục update trên host
For $i = 1 To UBound($aUpdate)-2
GUICtrlSetData ($idLabel,"Tải file: "&$aSave[$i]) ;Hiển thị đang tải file tên gì lên status
GUICtrlSetData($processbar, $oneprocess) ;thanh tiến trình về 0
Local $iBytesSize = InetGet($aUpdate[$i],$aSave[$i] , 1,1) ; chỗ này là lệnh download
$oneprocess = $oneprocess + $oneprocess ; phần trăm cho thanh tiến trình
Local $FileSize = InetGetSize($aUpdate[$i]) ;Get file size -> lấy dung lượng file để tính toán phần trăm đưa lên thanh tiến trình
While Not InetGetInfo($iBytesSize, 2) ;Loop until download is finished
Sleep(500) ;Sleep for half a second to avoid flicker in the progress bar
Local $BytesReceived = InetGetInfo($iBytesSize, 0) ;Get bytes received -> dung lượng đã download
Local $Pct = Int($BytesReceived / $FileSize * 100) ;Calculate percentage -> chia lấy phần trăm
;ProgressSet($Pct, $Pct & "%") ;Set progress bar
GUICtrlSetData($processbar1, $Pct) ; đặt phần trăm lên thanh tiến trình
WEnd

vinhthamthao
03-09-16, 11:24 PM
Cái này mình cũng sưu tâm nên k rõ tường tận !! mình có chú thích bên trong code những thứ hiểu được !! nêu nếu ai thấy có thể lấy đc thì lấy ! không tiếp gạch đá nhé :P


Hóng bạn share mấy file php kia . like để hóng

vocweb
04-09-16, 08:04 AM
Hóng bạn share mấy file php kia . like để hóng

Định làm cái autoupdate cho TLBB hả vinhthamthao. Có cái launcher + autoupdate tự viết nè

bualolu
26-09-16, 02:39 PM
Share file php đi bạn................

vinhthamthao
10-10-16, 08:45 PM
mình chạy được nhưng không hiện % trên thanh ai giúp mình cho nó hiện % với

Dark.Hades
15-10-16, 12:58 PM
Định làm cái autoupdate cho TLBB hả vinhthamthao. Có cái launcher + autoupdate tự viết nè
Update đc axp ko bác?
dùng kiểu thay thế file hay là pack file vào client v bác?

vinhthamthao
15-10-16, 04:24 PM
[/COLOR]
Định làm cái autoupdate cho TLBB hả vinhthamthao. Có cái launcher + autoupdate tự viết nè

Up được và vào game luôn được . đang muốn .cho 2 cái thanh chạy nó hiện % mà chưa được