Update (Checken + runterladen + entpacken)

  • Hallo Liebes Forum.

    Hier ein super Script zum updaten der Version.
    Falls die Version des scripts älter ist kann die neue runtergeladen werden.
    Diese wird direkt entpackt :)

    Alle datein die man braucht sind im Anhang.

    Bitte auf Feedback.

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <INet.au3>
    Const $vUpdateServer = "deinedomain.de" ; Deine domain um checken ohne www und http
    Const $vScriptFile = "http://www.deinedomain.de/version.txt" ; Zum checken der neuen version
    Const $vChangelogFile = "http://www.deinedomain.de/changelog.txt" ; Was sich geändert hat
    Const $vUnrarDLL = "http://www.deinedomain.de/unrar.dll" ; Benötigt man einfach
    Const $vMapFiles = "http://www.deinedomain.de/changelog.rar" ; Dort packst du einfach alle Datein rein die entpackt werden soll

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    HotKeySet("{END}", "_exit")
    $INI = @ScriptDir & "\Data.ini"

    [/autoit] [autoit][/autoit] [autoit]

    $vVersion = "1.12" ; Die version die das Script hat. Wird mit die aus dem Internet überpruft.
    $vGUIColor = 0x161616
    $vGUIColor2 = 0x161616
    Dim $hGUIListChangelog

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If Not FileExists(@ScriptDir & "\Data\") Then ; Ordner erstellen
    DirCreate(@ScriptDir & "\Data\")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If Not FileExists($INI) Then
    IniWrite($INI, "Default", "Titel", "(C) The-Franky 2010 - 2011 Visit: http://www.forum.the-franky.de Thanks")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    #region UpdateGUI
    ;UpdateGUI
    $vGUIStandartHeight = 290
    $vGUILargeHeight = $vGUIStandartHeight + 327
    $vGUIStandartWidth = 778
    $vGUIColor = 0x161616
    $hGUI = GUICreate("Tralala v" & $vVersion, $vGUIStandartWidth - 6, $vGUIStandartHeight) ; Das Gui wo am ende der Changelog drin steht wenn es eine neue version gibt.
    $hGUIUpdate = GUICreate("Tralala - Update", 500, 305, -1, -1, -1, 0x00000080, $hGUI)
    GUISetBkColor($vGUIColor, $hGUIUpdate)

    [/autoit] [autoit][/autoit] [autoit]

    $hGUILabelNewVersion = GUICtrlCreateLabel("", 10, 10, 480, 17)
    GUICtrlSetColor(-1, 0xFFFFFF)
    $hGUIListChangelog = GUICtrlCreateList("", 10, 30, 480, 240, BitOR(0x4000, 0x0100, 0x00200000))
    GUICtrlSetBkColor(-1, $vGUIColor)
    GUICtrlSetColor(-1, 0xFFFFFF)

    [/autoit] [autoit][/autoit] [autoit]

    $hGUIButtonDownload = GUICtrlCreateButton("Download", 10, 275, 235, 20)
    $hGUIButtonCancelUpdate = GUICtrlCreateButton("Cancel", 255, 275, 235, 20)
    GUISetState(@SW_HIDE)
    #endregion UpdateGUI
    MainGui() ; Das normale GUI wird erstellt :)
    Func MainGui()
    Opt("GUIOnEventMode", 0)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $maingui = GUICreate("Main Gui", 260, 175, -1, -1)
    $hGUILabelUpdateAndSApfelInfo = GUICtrlCreateLabel("", 25, 14, 84, 17)
    GUICtrlSetColor(-1, 0x00FF00)
    GUICtrlSetState(-1, 32)
    GUICtrlCreateLabel("Test2", 53, 38, 55, 17)
    $check = GUICtrlCreateButton("Check", 10, 88, 240, 20)
    $groupgeneral2 = GUICtrlCreateGroup("Info", 10, 113, 240, 42)
    $Label1 = GUICtrlCreateLabel("Made by" & "Franky", 24, 128, 205, 19)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW, $maingui)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg($maingui)
    Case -3
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Case $check
    _FU_ClickUpdateCheck()

    [/autoit] [autoit][/autoit] [autoit]

    Case $hGUIButtonDownload
    _FU_ClickButtonDownload()
    Case $hGUIButtonCancelUpdate, $hGUIUpdate
    _FU_ClickButtonCancelUpdate()

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    Sleep(10)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    GUIDelete($maingui)
    Sleep(100)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>MainGui

    [/autoit] [autoit][/autoit] [autoit]

    Func _exit()
    Sleep(10)
    Exit
    EndFunc ;==>_exit

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Hier wird gecheckt ob man verbindung zum word-wide-web hat
    ;Aber auch ob es ein Fehler gab
    ;Und ob die neuste version schon benutzt wird.
    Func _FU_ClickUpdateCheck()
    _FU_UpdateCheck($vVersion)
    If @error = 1 Then
    MsgBox(48, "Connection timeout", "You either do not have a connection to the world wide web or the server is currently down.")
    ElseIf @error = 2 Then
    MsgBox(48, "Error", "Error getting the version!")
    ElseIf @error = 3 Then
    MsgBox(64, "No update available", "You are using the latest version (v" & $vVersion & ").")
    Else
    GUISetState(@SW_SHOW, $hGUIUpdate) ;5
    EndIf
    EndFunc ;==>_FU_ClickUpdateCheck

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _FU_UpdateCheck($vCurrentVersion)
    If Ping($vUpdateServer) = 0 Then
    SetError(1)
    Else
    $vLatestVersion = _INetGetSource_($vScriptFile)
    If @error Then
    SetError(2)
    Else
    If $vCurrentVersion <> $vLatestVersion Then
    GUICtrlSetData($hGUILabelNewVersion, "There is a new version available (old: " & $vCurrentVersion & " | new: " & $vLatestVersion & ").")
    $vChangelog = StringSplit(_INetGetSource_($vChangelogFile), @CRLF)
    For $i = 1 To $vChangelog[0]
    GUICtrlSendMsg($hGUIListChangelog, 0x0180, 0, $vChangelog[$i])
    Next
    Return SetError(0, 0, $vLatestVersion)
    Else
    SetError(3)
    EndIf
    EndIf
    EndIf
    Return 0
    EndFunc ;==>_FU_UpdateCheck

    [/autoit] [autoit][/autoit] [autoit]

    Func _INetGetSource_($s_URL, $bString = True)
    Local $sString = InetRead($s_URL, 1)
    Local $nError = @error, $nExtended = @extended
    If $bString Then $sString = BinaryToString($sString)
    Return SetError($nError, $nExtended, $sString)
    EndFunc ;==>_INetGetSource_

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _FU_ClickButtonDownload()
    GUISetState(@SW_HIDE, $hGUIUpdate)
    GUICtrlSetData($hGUIListChangelog, "")
    _FU_MapFilesInstall()
    EndFunc ;==>_FU_ClickButtonDownload

    [/autoit] [autoit][/autoit] [autoit]

    Func _FU_ClickButtonCancelUpdate()
    GUISetState(@SW_HIDE, $hGUIUpdate)
    GUICtrlSetData($hGUIListChangelog, "")
    EndFunc ;==>_FU_ClickButtonCancelUpdate

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _FU_MapFilesInstall()
    $v_MapFiles = @TempDir & "\dateiname.rar" ; wird nur gespeichert ,damit es entpackt werden kann

    [/autoit] [autoit][/autoit] [autoit]

    ProgressOn("Downloading...", "Loading 'unrar.dll'", "")

    [/autoit] [autoit][/autoit] [autoit]

    $v_SizeUnrarDLL = Round(InetGetSize($vUnrarDLL) / 1024)
    $hDownload = InetGet($vUnrarDLL, @TempDir & "\unrar.dll", 1, 1)
    Do
    $v_DLBytes = Round(InetGetInfo($hDownload, 0) / 1024)
    $v_DLPercent = Round($v_DLBytes / $v_SizeUnrarDLL * 100)
    ProgressSet($v_DLPercent, @LF & $v_DLBytes & "/" & $v_SizeUnrarDLL & "KB " & $v_DLPercent & "%")
    Sleep(100)
    Until InetGetInfo($hDownload, 2)

    [/autoit] [autoit][/autoit] [autoit]

    ProgressSet(0, "", "Loading 'DateiName.rar'")

    [/autoit] [autoit][/autoit] [autoit]

    $v_SizeMapFilesRar = Round(InetGetSize($vMapFiles) / 1024)
    Local $hDownload = InetGet($vMapFiles, $v_MapFiles, 1, 1)
    Do
    $v_DLBytes = Round(InetGetInfo($hDownload, 0) / 1024)
    $v_DLPercent = Round($v_DLBytes / $v_SizeMapFilesRar * 100)
    ProgressSet($v_DLPercent, @LF & $v_DLBytes & "/" & $v_SizeMapFilesRar & "KB " & $v_DLPercent & "%")
    Sleep(200)
    Until InetGetInfo($hDownload, 2)

    [/autoit] [autoit][/autoit] [autoit]

    ProgressSet(100, @LF & "This may take some seconds.", "Installing DateiName...")
    $bExtractionSuc = _FU_RARExtract(@TempDir & "\unrar.dll", $v_MapFiles)

    [/autoit] [autoit][/autoit] [autoit]

    Sleep(2000)

    [/autoit] [autoit][/autoit] [autoit]

    FileDelete(@TempDir & "\unrar.dll")
    FileDelete($v_MapFiles)

    [/autoit] [autoit][/autoit] [autoit]

    If $bExtractionSuc = 1 Then
    ProgressSet(100, @LF & "Installation done. Have fun!", "Installing DateiName...")
    Sleep(3000)
    Else
    For $i = 15 To 1 Step - 1
    ProgressSet(100, "Error occured. Please make sure that you are connected" & @CRLF & "to the www and that SBot Manager was started in" & @CRLF & "32 bit mode. Continuing in " & $i & " seconds", "Installing DateiName...")
    Sleep(1000)
    Next
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ProgressOff()
    EndFunc ;==>_FU_MapFilesInstall

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Auto extraction of rar archives into the scriptdirectory
    Func _FU_RARExtract($v_UnrarDLL, $v_RarFile) ;$v_UnrarDLL = path to unrar.dll file, $v_RarFile = path to rar file
    Local $sResult

    [/autoit] [autoit][/autoit] [autoit]

    $rar_ArchivName = DllStructCreate("char[260]")
    DllStructSetData($rar_ArchivName, 1, $v_RarFile)

    [/autoit] [autoit][/autoit] [autoit]

    $rar_CmtBuf = DllStructCreate("char[16384]")
    For $iCount = 1 To 16384
    $sResult &= " "
    Next
    DllStructSetData($rar_CmtBuf, 1, $sResult)

    [/autoit] [autoit][/autoit] [autoit]

    $rar_Str = DllStructCreate("ptr;uint;uint;ptr;uint;uint;uint")

    [/autoit] [autoit][/autoit] [autoit]

    DllStructSetData($rar_Str, 1, DllStructGetPtr($rar_ArchivName))
    DllStructSetData($rar_Str, 2, 1) ;1 = $RAR_OM_EXTRACT
    DllStructSetData($rar_Str, 3, 0)
    DllStructSetData($rar_Str, 4, DllStructGetPtr($rar_CmtBuf))
    DllStructSetData($rar_Str, 5, 16384)
    DllStructSetData($rar_Str, 6, 0)
    DllStructSetData($rar_Str, 7, 0)
    $rar_Header_CmtBuf = DllStructCreate("char[16384]")

    [/autoit] [autoit][/autoit] [autoit]

    $rar_Header_Str = DllStructCreate("char[260];char[260];uint;uint;uint;uint;uint;uint;uint;uint;uint;ptr;uint;uint;uint")
    DllStructSetData($rar_Header_Str, 12, DllStructGetPtr($rar_Header_CmtBuf))

    [/autoit] [autoit][/autoit] [autoit]

    If FileExists($v_UnrarDLL) Then
    $DLLUnrar = DllOpen($v_UnrarDLL)
    $rar_OpenedArchive = DllCall($DLLUnrar, "int", "RAROpenArchive", "ptr", DllStructGetPtr($rar_Str))

    [/autoit] [autoit][/autoit] [autoit]

    If IsArray($rar_OpenedArchive) Then
    $iCount = 0
    Do
    $rar_Header = DllCall($DLLUnrar, "int", "RARReadHeader", "ptr", $rar_OpenedArchive[0], "ptr", DllStructGetPtr($rar_Header_Str))
    DllCall($DLLUnrar, "int", "RARProcessFile", "ptr", $rar_OpenedArchive[0], "int_ptr", 2, "ptr", "", "ptr", "") ;2 = $RAR_EXTRACT
    $iCount += 1
    Until $rar_Header[0] <> 0 Or $iCount = 20

    [/autoit] [autoit][/autoit] [autoit]

    DllCall($DLLUnrar, "int", "RARCloseArchive", "int", $rar_OpenedArchive[0])
    DllClose($DLLUnrar)
    Return 1
    EndIf
    EndIf
    Return 0
    EndFunc ;==>_FU_RARExtract

    [/autoit]