Tiny URL Downloader v0.96 Build 2011-01-24

  • Hier und da gibt es die Anfrage, wie man Downloads abbrechen kann. Hier ein möglicher Weg:

    Spoiler anzeigen
    [autoit]


    ;Coded by UEZ 2010/2011 - thanks to Ximorro for the idea with the bubbles ;)
    #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #AutoIt3Wrapper_UseX64=n
    ;~ #AutoIt3Wrapper_Icon=
    #AutoIt3Wrapper_Res_Description=Simple downloader made with AutoIt
    #AutoIt3Wrapper_Res_Fileversion=0.9.6.0
    #AutoIt3Wrapper_Res_LegalCopyright=UEZ 2010/2011
    #AutoIt3Wrapper_Res_Language=1033
    #AutoIt3Wrapper_Res_Field=Coded by|UEZ
    #AutoIt3Wrapper_Res_Field=Build|2011-01-24 Beta
    #AutoIt3Wrapper_Res_Field=Compile date|%longdate% %time%
    #AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%
    #AutoIt3Wrapper_UseUpx=y
    #AutoIt3Wrapper_UPX_Parameters=--ultra-brute
    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/sf /sv /om /cs=0 /cn=0
    #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_Obfuscated.au3"

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

    #NoTrayIcon
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiStatusBar.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Opt("GUIOnEventMode", 1)
    Opt("MustDeclareVars", 1)
    Opt("GUICloseOnESC", 0)

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

    #region GUI
    Global Const $width = 615, $height = 266
    Global $hGUI = GUICreate("Tiny URL Downloader v0.96 Build 2011-01-24 by UEZ " & ChrW(9996), $width, $height)
    WinSetTrans($hGUI,"", 0xFF);
    Global $bg_color = "E0E0F0"
    GUISetBkColor("0x" & $bg_color, $hGUI)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    Global $Input_URL = GUICtrlCreateInput("http://translation.autoit.de/autoitinfo/hilfedateien/AutoIt-Hilfe-Deutsch-3.3.6.1-Stand-07_09_10.zip", 64, 24, 497, 21)

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

    GUICtrlSetTip(-1, "Type in any valid URL address (http://, https://, ftp://)!")
    Global $Label1 = GUICtrlCreateLabel("URL:", 32, 27, 28, 14)
    GUICtrlSetBkColor(-1, -2)
    GUICtrlSetFont(-1, 9, 400, 1, "Arial")
    Global $Start_DL = GUICtrlCreateButton("&Download", 64, 128, 75, 25)
    GUICtrlSetOnEvent(-1, "Start_DL")
    GUICtrlSetTip(-1, "Press Download button to start download")
    Global $Stop_DL = GUICtrlCreateButton("&Cancel", 488, 128, 75, 25)
    GUICtrlSetOnEvent(-1, "Stop_DL")
    GUICtrlSetTip(-1, "Press Cancel button to stop download")
    GUICtrlSetState(-1, $GUI_DISABLE)
    Global $Exit = GUICtrlCreateButton("&Exit", 276, 128, 75, 25)
    GUICtrlSetOnEvent(-1, "_Exit")
    GUICtrlSetTip(-1, "Close program")
    Global $Progress = GUICtrlCreateProgress(22, 182, 570, 32)
    Global $StatusBar = _GUICtrlStatusBar_Create($hGUI)
    _GUICtrlStatusBar_SetText($StatusBar, "Ready")
    Global $aStatusBar = ControlGetPos("", "", $StatusBar)
    Global $dh = $aStatusBar[3] ;get the heigth of the statusbar

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

    Global $Input_Save_To = GUICtrlCreateInput(@ScriptDir, 64, 80, 410, 21)
    Global $Label2 = GUICtrlCreateLabel("Save to:", 17, 82, 44, 17)
    GUICtrlSetFont(-1, 9, 400, 1, "Arial")
    GUICtrlSetBkColor($Label2, -2)
    Global $Save_To = GUICtrlCreateButton("&Select Folder", 486, 78)
    GUICtrlSetOnEvent(-1, "Select_Folder")
    GUICtrlSetTip(-1, "Select a folder where you want to save the downloaded file (UNC path not supported yet!)")
    Global $ContextMenu = GUICtrlCreateContextMenu()
    Global $Submenu_Anim = GUICtrlCreateMenu("Animation", $ContextMenu)
    Global $Anim_Start = GUICtrlCreateMenuItem("Start", $Submenu_Anim)
    Global $Anim_Stop = GUICtrlCreateMenuItem("Stop", $Submenu_Anim)
    Global $Anim_Seperator = GUICtrlCreateMenuItem("", $Submenu_Anim)
    Global $Anim_Disable = GUICtrlCreateMenuItem("Disable", $Submenu_Anim)

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

    GUICtrlSetState($Anim_Start, $GUI_CHECKED)
    GUICtrlSetState($Anim_Stop, $GUI_UNCHECKED)
    Global $Display_Anim = True
    Global $Disable_Anim = False
    GUICtrlSetOnEvent($Anim_Start, "Start_Anim")
    GUICtrlSetOnEvent($Anim_Stop, "Stop_Anim")
    GUICtrlSetOnEvent($Anim_Disable, "Disable_Anim")

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

    ;~ Global $Group = GuiCtrlCreateGroup("", 3, 5, $width - 6, 220, BitOR($GUI_SS_DEFAULT_GROUP,$BS_FLAT))
    ;~ GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    ;Pseudo group
    Global $Lx = 10
    Global $Ly = 8
    Global $Lw = $width - 2 * $Lx
    Global $Lh = $height - 34
    Global $Line1 = GUICtrlCreateLabel("", $lx, $ly, $Lw, 1, $SS_SUNKEN)
    Global $Line2 = GUICtrlCreateLabel("", $lx, $Lh - 2, $Lw, 1, $SS_SUNKEN)
    Global $Line3 = GUICtrlCreateLabel("", $Lx, $ly, 1, $Lh - 9, $SS_SUNKEN)
    Global $Line4 = GUICtrlCreateLabel("", $Lw + $Lx - 1, $ly, 1, $Lh - 9, $SS_SUNKEN)
    Global $GText = GUICtrlCreateLabel("UEZ'11 ", $Lw - 2 * $Lx + 2, $Lh - 12, 25, 10, $SS_CENTER, $WS_EX_TOPMOST)
    GUICtrlSetFont(-1, 6, 100, 0)
    GUICtrlSetBkColor($GText, "0x" & $bg_color)
    GUICtrlSetColor(-1, 0x000040)

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

    GUISetState(@SW_SHOW)
    ControlFocus($hGUI, "", $Start_DL)
    #endregion

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

    #region GDI+ init
    _GDIPlus_Startup()
    Global $i
    Global Const $bubbles = 10, $max_speed = 5, $min_size = 30, $max_size = 70
    Global $aData[$bubbles][6] ;x,y,vx,vy,size,bmp
    For $i = 0 To $bubbles - 1
    $aData[$i][0] = Random(0, $width - $max_size, 1)
    $aData[$i][1] = Random(0, $height - $max_size, 1)
    $aData[$i][2] = _Random(-$max_speed, $max_speed, -1.5, 1.5) ;vx
    $aData[$i][3] = _Random(-$max_speed, $max_speed, -1.5, 1.5) ;vy
    $aData[$i][4] = Random($min_size, $max_size, 1) ;size
    ;~ $aData[$i][5] = _CreateBubbleBitmap($aData[$i][4], "0xA0" & Hex(Random(0xA0A0A0, 0xF0F0F0, 1), 6), "0xA0" & Hex(Random(0x808080, 0xF0F0F0, 1), 6)) ;handle to bitmap
    $aData[$i][5] = _CreateBubbleBitmap($aData[$i][4]) ;handle to bitmap
    Next

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

    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $hGraphic)
    Global $hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    Global $hBrush = _GDIPlus_BrushCreateSolid("0xFF" & $bg_color)
    _GDIPlus_GraphicsClear($hBackbuffer, "0xFF" & $bg_color)

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

    Global Const $GW_CHILD = 5, $GW_HWNDNEXT = 2
    Global $hRegion = _GDIPlus_RegionCreateFromRect(_GDIPlus_RectFCreate(0, 0, $width, $height))
    Global $hChild = _WinAPI_GetWindow($hGUI, $GW_CHILD)
    Global $aRect

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

    Do
    $aRect = ControlGetPos($hChild, "", 0)
    _GDIPlus_RegionCombineRect($hRegion, _GDIPlus_RectFCreate($aRect[0], $aRect[1], $aRect[2], $aRect[3]), 3)
    $hChild = _WinAPI_GetWindow($hChild, $GW_HWNDNEXT)
    Until Not $hChild
    _GDIPlus_GraphicsSetClipRegion($hGraphic, $hRegion)
    _GDIPlus_RegionDispose($hRegion)

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

    ;~ AdlibRegister("Start_Animation", 50)
    GUIRegisterMsg(0x0113, "Start_Animation") ;$WM_TIMER = 0x0113
    DllCall("User32.dll", "int", "SetTimer", "hwnd", $hGUI, "int", 0, "int", 50, "int", 0) ;set GUIRegisterMsg($WM_TIMER, "Draw") timer
    #endregion GDI+ init

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

    Global $hDownload, $nBytes, $nRead, $nSize, $calc, $file, $url, $current
    Global $speed = 0
    Global $prog = 0
    Global $stop = 0

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

    While Sleep(0x7FFFFF)
    WEnd

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

    Func Disable_Anim()
    $Display_Anim = False
    $Disable_Anim = True
    GUICtrlSetState($Anim_Start, $GUI_UNCHECKED)
    GUICtrlSetState($Anim_Stop, $GUI_UNCHECKED)
    GUICtrlSetState($Anim_Disable, $GUI_CHECKED)
    EndFunc ;==>Disable_Anim

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

    Func Start_Anim()
    $Display_Anim = True
    $Disable_Anim = False
    GUICtrlSetState($Anim_Start, $GUI_CHECKED)
    GUICtrlSetState($Anim_Stop, $GUI_UNCHECKED)
    GUICtrlSetState($Anim_Disable, $GUI_UNCHECKED)
    EndFunc ;==>Start_Anim

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

    Func Stop_Anim()
    $Display_Anim = False
    $Disable_Anim = False
    GUICtrlSetState($Anim_Start, $GUI_UNCHECKED)
    GUICtrlSetState($Anim_Stop, $GUI_CHECKED)
    GUICtrlSetState($Anim_Disable, $GUI_UNCHECKED)
    EndFunc ;==>Stop_Anim

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

    Func _Random($min, $max, $emin, $emax, $int = 0)
    Local $r1 = Random($min, $emin, $int)
    Local $r2 = Random($emax, $max, $int)
    If Random(0, 1, 1) Then Return $r1
    Return $r2
    EndFunc ;==>_Random

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

    Func Select_Folder()
    Local $folder = FileSelectFolder("Select a folder", "", 5)
    If @error Or StringMid($folder, 2, 2) <> ":\" Then Return
    GUICtrlSetData($Input_Save_To, $folder)
    EndFunc ;==>Select_Folder

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

    Func Start_DL()
    Local $mc = MouseGetCursor()
    $url = GUICtrlRead($Input_URL)
    $file = GUICtrlRead($Input_Save_To)
    If $url <> "" And $file <> "" Then
    GUISetOnEvent($GUI_EVENT_CLOSE, "")
    Disable_Buttons()
    GUISetCursor(15, 0, $hGUI)
    Sleep(100)
    $nSize = InetGetSize($url)
    If $nSize < 1 Then
    GUISetCursor($mc, 0, $hGUI)
    Enable_Buttons()
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    MsgBox(16, "Error", "Unable to get file size from server!" & @CRLF & @CRLF & "Check URL or maybe server down!", 15)
    Return
    EndIf
    GUISetCursor($mc, 0, $hGUI)
    $file &= "\" & StringRight($url, StringLen($url) - StringInStr($url, "/", 0, -1)) & ".tmp"
    $hDownload = InetGet($url, $file, 1, 1)
    AdlibRegister("DL_Check", 50)
    $current = 0
    AdlibRegister("DL_Speed", 1000)
    EndIf
    EndFunc ;==>Start_DL

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

    Func DL_Check()
    Local $msg
    If InetGetInfo($hDownload, 2) Or $stop Then
    InetClose($hDownload)
    Enable_Buttons()
    AdlibUnRegister("DL_Check")
    AdlibUnRegister("DL_Speed")
    If $stop Then
    $msg = MsgBox(4 + 48, "Warning", "Download was cancelled!" & @LF & @LF & _
    " Delete incomplete file?", 20)
    Switch $msg
    Case -1, 6
    FileDelete($file)
    If @error Then $msg = MsgBox(16, "Error", "Unable to delete file, maybe locked by another process!" & @CRLF & _
    "Check manually!", 20)
    EndSwitch
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    Else
    GUICtrlSetData($Progress, 100)
    _GUICtrlStatusBar_SetText($StatusBar, $nSize & " / " & $nSize & " bytes (100 % @ " & $speed & " kb/s)")
    Sleep(500)
    FileMove($file, StringLeft($file, StringLen($file) - 4), 9)
    MsgBox(0, "Information", "Download completed!", 20)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    EndIf
    $stop = 0
    GUICtrlSetData($Progress, 0)
    _GUICtrlStatusBar_SetText($StatusBar, "Ready")
    Else
    $nRead = InetGetInfo($hDownload, 0)
    $calc = Int(100 * $nRead / $nSize)
    GUICtrlSetData($Progress, $calc)
    _GUICtrlStatusBar_SetText($StatusBar, $nRead & " / " & $nSize & " bytes (" & $calc & " % @ " & $speed & " kb/s)")
    EndIf
    EndFunc ;==>DL_Check

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

    Func Enable_Buttons()
    GUICtrlSetState($Start_DL, $GUI_ENABLE)
    GUICtrlSetState($Stop_DL, $GUI_DISABLE)
    GUICtrlSetState($Exit, $GUI_ENABLE)
    GUICtrlSetState($Input_Save_To, $GUI_ENABLE)
    GUICtrlSetState($Input_URL, $GUI_ENABLE)
    GUICtrlSetState($Save_To, $GUI_ENABLE)
    EndFunc ;==>Enable_Buttons

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

    Func Disable_Buttons()
    GUICtrlSetState($Start_DL, $GUI_DISABLE)
    GUICtrlSetState($Exit, $GUI_DISABLE)
    GUICtrlSetState($Input_Save_To, $GUI_DISABLE)
    GUICtrlSetState($Input_URL, $GUI_DISABLE)
    GUICtrlSetState($Save_To, $GUI_DISABLE)
    GUICtrlSetState($Stop_DL, $GUI_ENABLE)
    EndFunc ;==>Disable_Buttons

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

    Func DL_Speed()
    $speed = Round(($nRead - $current) / 1024, 2)
    $current = $nRead
    EndFunc ;==>DL_Speed

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

    Func Stop_DL()
    $stop = 1
    EndFunc ;==>Stop_DL

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

    Func _Exit()
    InetClose($hDownload)
    Close_GDIplus()
    GUIDelete($hGUI)
    Exit
    EndFunc ;==>_Exit

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

    #region GDI+
    Func Start_Animation()
    Local $j
    ;draw bubbles
    If $Disable_Anim Then _GDIPlus_GraphicsClear($hGraphic, "0xFF" & $bg_color)
    If $Display_Anim Then
    ;~ _GDIPlus_GraphicsClear($hBackbuffer, "0xFF" & $bg_color)
    _GDIPlus_GraphicsFillRect($hBackbuffer, 0, 0, $width, $height, $hBrush)
    For $j = 0 To $bubbles - 1
    _GDIPlus_GraphicsDrawImage($hBackbuffer, $aData[$j][5], $aData[$j][0], $aData[$j][1])
    Next
    ;calculate new position incl. border collision check
    For $j = 0 To $bubbles - 1
    $aData[$j][0] += $aData[$j][2] ;increase x coordinate with appropriate slope
    $aData[$j][1] += $aData[$j][3] ;increase y coordinate with appropriate slope
    If $aData[$j][0] <= 0 Then ;border collision x left
    $aData[$j][0] = 1
    $aData[$j][2] *= -1
    ElseIf $aData[$j][0] >= $width - $aData[$j][4] Then ;border collision x right
    $aData[$j][0] = $width - ($aData[$j][4] + 1)
    $aData[$j][2] *= -1
    EndIf
    If $aData[$j][1] <= 0 Then ;border collision y top
    $aData[$j][1] = 1
    $aData[$j][3] *= -1
    ElseIf $aData[$j][1] >= $height - $aData[$j][4] - $dh Then ;border collision y bottom
    $aData[$j][1] = $height - ($aData[$j][4] + 1) - $dh
    $aData[$j][3] *= -1
    EndIf
    Next
    Collision_Check()
    EndIf
    If Not $Disable_Anim Then _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $width, $height)
    EndFunc ;==>Start_Animation

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

    Func Collision_Check() ;0:x, 1:y, 2:vx, 3:vy, 4:size, 5:bmp
    Local $Delta_X, $Delta_Y, $Distance, $Matrix11, $Matrix12, $Matrix21, $Matrix22, $Vp1, $Vp2, $Vs1, $Vs2
    For $i = 0 To $bubbles - 1
    For $j = $i + 1 To $bubbles - 1
    If Pixel_Distance($aData[$i][0], $aData[$i][1], $aData[$j][0], $aData[$j][1]) < ($aData[$i][4] + $aData[$j][4]) / 2 Then
    $Delta_X = $aData[$i][0] - $aData[$j][0]
    $Delta_Y = $aData[$i][1] - $aData[$j][1]
    $Distance = Sqrt($Delta_X * $Delta_X + $Delta_Y * $Delta_Y)

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

    $Matrix11 = $Delta_X / $Distance
    $Matrix12 = -$Delta_Y / $Distance
    $Matrix21 = $Delta_Y / $Distance
    $Matrix22 = $Delta_X / $Distance

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

    $Vp1 = $aData[$i][2] * $Matrix11 + $aData[$i][3] * - $Matrix12
    $Vs1 = $aData[$i][2] * - $Matrix21 + $aData[$i][3] * $Matrix22
    $Vp2 = $aData[$j][2] * $Matrix11 + $aData[$j][3] * - $Matrix12
    $Vs2 = $aData[$j][2] * - $Matrix21 + $aData[$j][3] * $Matrix22

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

    If $Vp1 - $Vp2 < 0 Then
    $aData[$i][2] = $Matrix11 + $Vs1 * $Matrix12
    $aData[$i][3] = $Matrix21 + $Vs1 * $Matrix22
    $aData[$j][2] = $Matrix11 + $Vs2 * $Matrix12
    $aData[$j][3] = $Matrix21 + $Vs2 * $Matrix22
    EndIf
    EndIf
    Next
    Next
    EndFunc ;==>Collision_Check

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

    Func Pixel_Distance($x1, $y1, $x2, $y2) ;Pythagoras theorem
    Local $a, $b
    If $x2 = $x1 And $y2 = $y1 Then Return 0
    $a = $y2 - $y1
    $b = $x2 - $x1
    Return Sqrt($a * $a + $b * $b)
    EndFunc ;==>Pixel_Distance

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

    Func Close_GDIplus()
    ;~ AdlibUnRegister("Start_Animation")
    GUIRegisterMsg(0x0113, "")
    _GDIPlus_BrushDispose($hBrush)
    For $i = 0 To $bubbles - 1
    _GDIPlus_BitmapDispose($aData[$i][5])
    Next
    _GDIPlus_GraphicsDispose($hBackbuffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    EndFunc ;==>Close_GDIplus

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

    Func _CreateBubbleBitmap($size = 75, $gradient_start = 0xA0F0C0C0, $gradient_end = 0xA0C0F0C0, $angle1 = 90, $angle2 = 45, $pen1 = 0x55AAAAAF, $pen2 = 0x50FFFFFF)
    Local $ps1 = 2, $ps2 = Int($size / 12)
    Local $hBitmap = _GDIPlus_BitmapCreateFromScan0($size, $size)
    Local $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsSetSmoothingMode($hContext, 2)
    Local $Pen_Border = _GDIPlus_PenCreate($pen1, $ps1)
    Local $Pen_Reflection = _GDIPlus_PenCreate($pen2, $ps2)
    Local $Brush_Gradient = _GDIPlus_CreateLineBrush(0, 0, $size, $size, $gradient_start, $gradient_end)
    _GDIPlus_GraphicsFillEllipse($hContext, 0, 0, $size, $size, $Brush_Gradient)
    _GDIPlus_GraphicsDrawArc($hContext, $size / 3, $size / 5, $size / 2, $size / 2, 10, -$angle1, $Pen_Reflection)
    _GDIPlus_GraphicsDrawArc($hContext, $size / 6, $size / 3.5, $size / 2, $size / 2, -210, -$angle2, $Pen_Reflection)
    _GDIPlus_GraphicsDrawEllipse($hContext, 0, 0, $size - $ps1, $size - $ps1, $Pen_Border)
    _GDIPlus_PenDispose($Pen_Border)
    _GDIPlus_PenDispose($Pen_Reflection)
    _GDIPlus_BrushDispose($Brush_Gradient)
    _GDIPlus_GraphicsDispose($hContext)
    Return $hBitmap
    EndFunc ;==>_CreateBubbleBitmap

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

    Func _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $iStride = 0, $iPixelFormat = 0x0026200A, $pScan0 = 0)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", $iStride, "int", $iPixelFormat, "ptr", $pScan0, "int*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aResult[6]
    EndFunc ;==>_GDIPlus_BitmapCreateFromScan0

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

    Func _GDIPlus_CreateLineBrush($iPoint1X, $iPoint1Y, $iPoint2X, $iPoint2Y, $iArgb1 = 0xFF0000FF, $iArgb2 = 0xFFFF0000, $WrapMode = 0)
    Local $tPoint1, $pPoint1, $tPoint2, $pPoint2, $aRet
    If $iArgb1 = "" Then $iArgb1 = 0xFF0000FF
    If $iArgb2 = "" Then $iArgb2 = 0xFFFF0000
    If $WrapMode = -1 Then $WrapMode = 0
    $tPoint1 = DllStructCreate("float X;float Y")
    $pPoint1 = DllStructGetPtr($tPoint1)
    DllStructSetData($tPoint1, "X", $iPoint1X)
    DllStructSetData($tPoint1, "Y", $iPoint1Y)
    $tPoint2 = DllStructCreate("float X;float Y")
    $pPoint2 = DllStructGetPtr($tPoint2)
    DllStructSetData($tPoint2, "X", $iPoint2X)
    DllStructSetData($tPoint2, "Y", $iPoint2Y)
    $aRet = DllCall($ghGDIPDll, "int", "GdipCreateLineBrush", "ptr", $pPoint1, "ptr", $pPoint2, "int", $iArgb1, "int", $iArgb2, "int", $WrapMode, "int*", 0)
    Return $aRet[6]
    EndFunc ;==>_GDIPlus_CreateLineBrush

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

    Func _GDIPlus_GraphicsSetClipRegion($hGraphics, $hRegion, $iCombineMode = 0)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetClipRegion", "hwnd", $hGraphics, "hwnd", $hRegion, "int", $iCombineMode)
    If @error Then Return SetError(@error, @extended, False)
    Return $aResult[0] = 0
    EndFunc ;==>_GDIPlus_GraphicsSetClipRegion

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

    Func _GDIPlus_RegionCreateFromRect($tRectF)
    Local $pRectF, $aResult
    $pRectF = DllStructGetPtr($tRectF)
    $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateRegionRect", "ptr", $pRectF, "int*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aResult[2]
    EndFunc ;==>_GDIPlus_RegionCreateFromRect

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

    Func _GDIPlus_RegionCombineRect($hRegion, $tRectF, $iCombineMode = 2)
    Local $pRectF, $aResult
    $pRectF = DllStructGetPtr($tRectF)
    $aResult = DllCall($ghGDIPDll, "uint", "GdipCombineRegionRect", "hwnd", $hRegion, "ptr", $pRectF, "int", $iCombineMode)
    If @error Then Return SetError(@error, @extended, False)
    Return $aResult[0] = 0
    EndFunc ;==>_GDIPlus_RegionCombineRect

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

    Func _GDIPlus_RegionDispose($hRegion)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipDeleteRegion", "hwnd", $hRegion)
    If @error Then Return SetError(@error, @extended, False)
    Return $aResult[0] = 0
    EndFunc ;==>_GDIPlus_RegionDispose
    #endregion GDI+

    [/autoit]

    autoit.de/wcf/attachment/12248/

    Sollte ab Windows2000 bis Win7 x64 funzen! Momentan ohne Proxy und Resume Unterstützung.

    Gruß,
    UEZ

  • Sprenger120: Vielen Dank für dein Feedback! :)

    Kleines Update -> die Bläschen haben jetzt eine Pseudokollision! Vielleicht gefällst ja euch...

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Die nächste Frage wäre, wie man den Download dann auch an der Stelle wieder fortführen kann, an der man stehengeblieben ist...

    Hast du dir die möglichen Parameter zu InetGet angeschaut? Dann müsstest du die Antwort kennen, mit dieser Methode gar nicht. Afaik hat aber @progandy in einem Hilfe-Thread shon einmal eine Möglichkeit aufgezeigt, wie es unter bestimmten Voraussetzungen mit WinHTTp? funktioniert.

    UEZ, die Animation ist gelungen, jedoch habe ich in meinem MP3-Player und auch im YT-Downloader während dein Skript gestartet ist ein merkwürdiges Flackern in Teilbereichen der GUI. In beiden benutze ich WinSetTrans und ich bin mir sicher dass es damit zu tun hat. Wenn der Download beendet ist ist auch das Flackern solange verschwunden bis ich die MsgBox bestätige.

    Edit: auch Tooltips des Explorer reagieren mit einem Flackern während das Skript läuft. Ich benutze WinXP Prof. SP3

    Frohes gutes neues Jahr autoBert

  • Hast du dir die möglichen Parameter zu InetGet angeschaut? Dann müsstest du die Antwort kennen, mit dieser Methode gar nicht.


    Ja, ich weiß das das so nicht möglich ist, es ist nun so, dass das "Abbrechen eines Downloads" nun geschafft ist. Die nächste zu bewältigende Aufgabe in diesem Forum wäre nunmal dann das fortführen ;)
    Das es das schonmal von progandy gab, wusste ich nicht.
    Kann dein Problem mit dem Flackern nicht reproduzieren, läuft einwandfrei, Win7 CPU:X64 OS:X86, getestet mit der im Thread des Links in deiner Signatur angehängten Exe.

    2 Mal editiert, zuletzt von stayawayknight (5. Januar 2011 um 00:33)

  • Hast du dir die möglichen Parameter zu InetGet angeschaut? Dann müsstest du die Antwort kennen, mit dieser Methode gar nicht. Afaik hat aber @progandy in einem Hilfe-Thread shon einmal eine Möglichkeit aufgezeigt, wie es unter bestimmten Voraussetzungen mit WinHTTp? funktioniert.

    UEZ, die Animation ist gelungen, jedoch habe ich in meinem MP3-Player und auch im YT-Downloader während dein Skript gestartet ist ein merkwürdiges Flackern in Teilbereichen der GUI. In beiden benutze ich WinSetTrans und ich bin mir sicher dass es damit zu tun hat. Wenn der Download beendet ist ist auch das Flackern solange verschwunden bis ich die MsgBox bestätige.

    Edit: auch Tooltips des Explorer reagieren mit einem Flackern während das Skript läuft. Ich benutze WinXP Prof. SP3

    Frohes gutes neues Jahr autoBert


    Ich habe mal deine 2 Tools auf einem Notebook mit WinXP SP2 laufen lassen, konnte aber kein flackern erkennen!
    Vielleicht können mal die XP User testen und hier posten, ob sie ein Flackern sehen!

    Wirklich gut gelungen, selbst in dieser "stinknormalen" Gui ist wieder eine GDI+ Extra eingebaut :thumbup:
    Die nächste Frage wäre, wie man den Download dann auch an der Stelle wieder fortführen kann, an der man stehengeblieben ist...

    Mal sehen, ob ich das noch implementieren kann.

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Ich habe mal deine 2 Tools auf einem Notebook mit WinXP SP2 laufen lassen, konnte aber kein flackern erkennen!

    Das Flackern tritt in den Bereichen der Gui auf, die deinen Downlaoder überlagern würden, Den gleichen Effekt habe ich auch bei Tooltips z.B. Expkoerer (Dateiinfos), FireFox (Infos zu Überschrift eines Tabs).
    Wenn sich die Guis nicht überlappen tritt der Effekt nicht auf,

    mfg autoBert

  • Hmmm, habe es jetzt in meiner VM nachvollziehen können! Merkwürdig! ?(

    Workaround: die Animation abstellen -> rmt -> disable.

    Warum es zum Flackern auf WinXP kommt, kann ich leider nicht sagen! Werde mal einige Sachen unter WInXP ausprobieren! Unter Win7 X64 läuft's ohne Probleme!

    Danke für dein Feedback!

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    Einmal editiert, zuletzt von UEZ (5. Januar 2011 um 19:12)

  • Respekt :P

    Ich finde die Animation klasse (Habe selbst vor einigen Tagen schon überlegt, ob ich den Win7 Seifenblasenbildschirmschohner nachbauen soll...)
    Auch das Downloaden geht sauber von der Hand :)
    Du holst ungeahnte Geschwindigkeiten aus meinem schlechten inet^^
    25kb/s. Das hab ich mit dem normalen Firefoxdownloader so gut wie nie...

    (system ist WinXP 32Bit)

    lg

  • Hey.

    Nette sache :thumbup:

    Cool würde es mitsicherheit kommen, wenn man durch Bewegung des Fensters die Blasen anschupsen könnte ;)

    mfg Datzer

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • :thumbup: alles ok, kein Flackern mehr, dachte eigentlich es sei ein grundsätzliches Problem von XP im Zusammenhang mit GDI+ und Transparenz,

    mfg autoBert


    Das hängt schon mit WinXP zusammen, aber warum das so ist, weiß ich nicht.
    Jedenfalls gibts es ein Workaround dazu -> [ gelöst ] Schlechte GDI+ Performance auf WinXP


    Respekt :P

    Ich finde die Animation klasse (Habe selbst vor einigen Tagen schon überlegt, ob ich den Win7 Seifenblasenbildschirmschohner nachbauen soll...)
    Auch das Downloaden geht sauber von der Hand :)
    Du holst ungeahnte Geschwindigkeiten aus meinem schlechten inet^^
    25kb/s. Das hab ich mit dem normalen Firefoxdownloader so gut wie nie...

    (system ist WinXP 32Bit)

    lg


    Das mit dem Screensaver geht mir eigentlich schon lange durch den Kopf, da ich schon lange die Bubbles vom Screensaver extrahiert habe...


    Hey.

    Nette sache :thumbup:

    Cool würde es mitsicherheit kommen, wenn man durch Bewegung des Fensters die Blasen anschupsen könnte ;)

    mfg Datzer


    Mal sehen, ob ich das hinbekomme...

    @all: vielen Dank für euer Feedback! :thumbup:

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • ich muss auch zugeben, so simpel das Programm, wird es durch die Animation echt unterhaltend aufgepeppt. Beeindruckend hier ganz klar, das nicht einfach simpel eine animierte GIF läuft, man merkt, da hat jemand ordentlichen Hirnschmalz investiert, Respekt. :rock:

    Zwei Punkte sind mir aufgefallen, entschuldigt mein Unwissen :D

    1. , würde ich das Tool öfters als Downloader nutzen, würde ich es vermutlich ein wenig aufbohren, was den abgebrochenen Download angeht ( auch wenn mir klar ist, dass das Beispiel in erster Linie aufzeigen sollte, wie ein Abbruch eingebaut werden kann ) . Ich würde analog anderen Programmen vielleicht hingehen und der Datei während des Downloads einen temporären Dateinamen im Zielverzeichnis geben a la filename.exe.part und erst, wenn die Datei komplett durchlaufen ist in den Originalnamen umbenennen.

    Zusätzlich oder stattdessen im Falle eines Abbruchs im Nachgang der Funktion DL_Check die unvollständige Datei löschen. Es macht keinen Sinn, eine abgebrochene Datei aufzuheben.

    2. betrifft mein Unvermögen, da ich noch ganz am Anfang der Programmierungsversuche stehe.

    Wenn ich zum Testen den Downloader hier nehme, und es um eine banale Groupbox ergänzen will, werden mir große Teile des Inhaltes und der Animation verschluckt. Gut dachte ich, vermutlich muss ich der Groupbox noch ein Attribut mitgeben, das der Hintergrund durchsichtig ist ( Function GUICtrlSetBkColor mit $GUI_BKCOLOR_TRANSPARENT )

    Das klappt aber nicht.

    Nehm ich die Animation raus, geht es. ich habe lediglich den befehl GuiCtrlCreateGroup hinzugefügt.

    [autoit]

    #region GUI
    Global Const $width = 615, $height = 267
    Global $hGUI = GUICreate("Tiny URL Downloader v0.95.5 Build 2011-01-06 by UEZ 2011", $width, $height)
    WinSetTrans($hGUI,"", 0xFF);
    Global $bg_color = "E0E0F0"
    GUISetBkColor("0x" & $bg_color, $hGUI)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GuiCtrlCreateGroup("", 30, 22, $width -60, 220) ; <-- dies mein ich
    Global $Input_URL = GUICtrlCreateInput("http://translation.autoit.de/autoitinfo/hilfedateien/AutoIt-Hilfe-Deutsch-3.3.6.1-Stand-07_09_10.zip", 64, 24, 497, 21)

    [/autoit]
  • Hi Prickel,

    danke für dein Feedback! Ich werde mal sehen, was ich machen kann, um deine Punkte zu integrieren!

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Zitat


    2. betrifft mein Unvermögen, da ich noch ganz am Anfang der Programmierungsversuche stehe.

    Wenn ich zum Testen den Downloader hier nehme, und es um eine banale Groupbox ergänzen will, werden mir große Teile des Inhaltes und der Animation verschluckt. Gut dachte ich, vermutlich muss ich der Groupbox noch ein Attribut mitgeben, das der Hintergrund durchsichtig ist ( Function GUICtrlSetBkColor mit $GUI_BKCOLOR_TRANSPARENT )

    Das klappt aber nicht.

    Nehm ich die Animation raus, geht es. ich habe lediglich den befehl GuiCtrlCreateGroup hinzugefügt.


    GuiCtrlCreateGroup() erstellt anscheinend ein Label mit einem Rahmen. Wenn ich ein Label mit den gleichen Dimensionen erstelle, habe ich den gleichen Effekt, da die kompletten Controls überdeckt werden.


    Hier 2 Alternativen, die mir auf die Schnelle eingefallen sind:

    1:

    Spoiler anzeigen
    [autoit]


    ;Coded by UEZ 2010/2011 - thanks to Ximorro for the idea with the bubbles ;)
    #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #AutoIt3Wrapper_UseX64=n
    ;~ #AutoIt3Wrapper_Icon=
    #AutoIt3Wrapper_Res_Description=Simple downloader made with AutoIt
    #AutoIt3Wrapper_Res_Fileversion=0.9.6.0
    #AutoIt3Wrapper_Res_LegalCopyright=UEZ 2010/2011
    #AutoIt3Wrapper_Res_Language=1033
    #AutoIt3Wrapper_Res_Field=Coded by|UEZ
    #AutoIt3Wrapper_Res_Field=Build|2011-01-20 Beta
    #AutoIt3Wrapper_Res_Field=Compile date|%longdate% %time%
    #AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%
    #AutoIt3Wrapper_UseUpx=y
    #AutoIt3Wrapper_UPX_Parameters=--ultra-brute
    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/sf /sv /om /cs=0 /cn=0
    #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_Obfuscated.au3"

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

    #NoTrayIcon
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiStatusBar.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Opt("GUIOnEventMode", 1)
    Opt("MustDeclareVars", 1)
    Opt("GUICloseOnESC", 0)

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

    #region GUI
    Global Const $width = 615, $height = 266
    Global $hGUI = GUICreate("Tiny URL Downloader v0.96 Build 2011-01-20 by UEZ " & ChrW(9996), $width, $height)
    WinSetTrans($hGUI,"", 0xFF);
    Global $bg_color = "E0E0F0"
    GUISetBkColor("0x" & $bg_color, $hGUI)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    Global $Input_URL = GUICtrlCreateInput("http://translation.autoit.de/autoitinfo/hilfedateien/AutoIt-Hilfe-Deutsch-3.3.6.1-Stand-07_09_10.zip", 64, 24, 497, 21)

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

    ;~ Global $Group = GuiCtrlCreateGroup("", 3, 5, $width - 6, 220, BitOR($GUI_SS_DEFAULT_GROUP,$BS_FLAT))
    ;~ GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    ;Pseudo group
    Global $Lx = 3
    Global $Ly = 10
    Global $Lw= $width - 5
    Global $Lh = $height - 40
    Global $Line1 = GUICtrlCreateLabel("", $lx, $ly, $Lw, 1, $SS_SUNKEN)
    Global $Line2 = GUICtrlCreateLabel("", $lx, $Lh, $Lw, 1, $SS_SUNKEN)
    Global $Line3 = GUICtrlCreateLabel("", $Lx, $ly, 1, $Lh - 9, $SS_SUNKEN)
    Global $Line4 = GUICtrlCreateLabel("", $Lw, $ly, 1, $Lh - 9, $SS_SUNKEN)

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

    GUICtrlSetTip(-1, "Type in any valid URL address (http://, https://, ftp://)!")
    Global $Label1 = GUICtrlCreateLabel("URL:", 32, 27, 28, 14)
    GUICtrlSetBkColor(-1, -2)
    GUICtrlSetFont(-1, 9, 400, 1, "Arial")
    Global $Start_DL = GUICtrlCreateButton("&Download", 64, 128, 75, 25)
    GUICtrlSetOnEvent(-1, "Start_DL")
    GUICtrlSetTip(-1, "Press Download button to start download")
    Global $Stop_DL = GUICtrlCreateButton("&Cancel", 488, 128, 75, 25)
    GUICtrlSetOnEvent(-1, "Stop_DL")
    GUICtrlSetTip(-1, "Press Cancel button to stop download")
    GUICtrlSetState(-1, $GUI_DISABLE)
    Global $Exit = GUICtrlCreateButton("&Exit", 276, 128, 75, 25)
    GUICtrlSetOnEvent(-1, "_Exit")
    GUICtrlSetTip(-1, "Close program")
    Global $Progress = GUICtrlCreateProgress(8, 182, 598, 32)
    Global $StatusBar = _GUICtrlStatusBar_Create($hGUI)
    _GUICtrlStatusBar_SetText($StatusBar, "Ready")
    Global $aStatusBar = ControlGetPos("", "", $StatusBar)
    Global $dh = $aStatusBar[3] ;get the heigth of the statusbar
    Global $Input_Save_To = GUICtrlCreateInput(@ScriptDir, 64, 80, 410, 21)
    Global $Label2 = GUICtrlCreateLabel("Save to:", 17, 82, 44, 17)
    GUICtrlSetFont(-1, 9, 400, 1, "Arial")
    GUICtrlSetBkColor($Label2, -2)
    Global $Save_To = GUICtrlCreateButton("&Select Folder", 486, 78)
    GUICtrlSetOnEvent(-1, "Select_Folder")
    GUICtrlSetTip(-1, "Select a folder where you want to save the downloaded file (UNC path not supported yet!)")
    Global $ContextMenu = GUICtrlCreateContextMenu()
    Global $Submenu_Anim = GUICtrlCreateMenu("Animation", $ContextMenu)
    Global $Anim_Start = GUICtrlCreateMenuItem("Start", $Submenu_Anim)
    Global $Anim_Stop = GUICtrlCreateMenuItem("Stop", $Submenu_Anim)
    Global $Anim_Seperator = GUICtrlCreateMenuItem("", $Submenu_Anim)
    Global $Anim_Disable = GUICtrlCreateMenuItem("Disable", $Submenu_Anim)

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

    GUICtrlSetState($Anim_Start, $GUI_CHECKED)
    GUICtrlSetState($Anim_Stop, $GUI_UNCHECKED)
    Global $Display_Anim = True
    Global $Disable_Anim = False
    GUICtrlSetOnEvent($Anim_Start, "Start_Anim")
    GUICtrlSetOnEvent($Anim_Stop, "Stop_Anim")
    GUICtrlSetOnEvent($Anim_Disable, "Disable_Anim")
    GUISetState(@SW_SHOW)
    ControlFocus($hGUI, "", $Start_DL)
    #endregion

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

    #region GDI+ init
    _GDIPlus_Startup()
    Global $i
    Global Const $bubbles = 16, $max_speed = 5, $min_size = 30, $max_size = 70
    Global $aData[$bubbles][6] ;x,y,vx,vy,size,bmp
    For $i = 0 To $bubbles - 1
    $aData[$i][0] = Random(0, $width - $max_size, 1)
    $aData[$i][1] = Random(0, $height - $max_size, 1)
    $aData[$i][2] = _Random(-$max_speed, $max_speed, -1.5, 1.5) ;vx
    $aData[$i][3] = _Random(-$max_speed, $max_speed, -1.5, 1.5) ;vy
    $aData[$i][4] = Random($min_size, $max_size, 1) ;size
    ;~ $aData[$i][5] = _CreateBubbleBitmap($aData[$i][4], "0xA0" & Hex(Random(0xA0A0A0, 0xF0F0F0, 1), 6), "0xA0" & Hex(Random(0x808080, 0xF0F0F0, 1), 6)) ;handle to bitmap
    $aData[$i][5] = _CreateBubbleBitmap($aData[$i][4]) ;handle to bitmap
    Next

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

    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $hGraphic)
    Global $hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    Global $hBrush = _GDIPlus_BrushCreateSolid("0xFF" & $bg_color)
    _GDIPlus_GraphicsClear($hBackbuffer, "0xFF" & $bg_color)

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

    Global Const $GW_CHILD = 5, $GW_HWNDNEXT = 2
    Global $hRegion = _GDIPlus_RegionCreateFromRect(_GDIPlus_RectFCreate(0, 0, $width, $height))
    Global $hChild = _WinAPI_GetWindow($hGUI, $GW_CHILD)
    Global $aRect

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

    Do
    $aRect = ControlGetPos($hChild, "", 0)
    _GDIPlus_RegionCombineRect($hRegion, _GDIPlus_RectFCreate($aRect[0], $aRect[1], $aRect[2], $aRect[3]), 3)
    $hChild = _WinAPI_GetWindow($hChild, $GW_HWNDNEXT)
    Until Not $hChild
    _GDIPlus_GraphicsSetClipRegion($hGraphic, $hRegion)
    _GDIPlus_RegionDispose($hRegion)

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

    ;~ AdlibRegister("Start_Animation", 50)
    GUIRegisterMsg(0x0113, "Start_Animation") ;$WM_TIMER = 0x0113
    DllCall("User32.dll", "int", "SetTimer", "hwnd", $hGUI, "int", 0, "int", 50, "int", 0) ;set GUIRegisterMsg($WM_TIMER, "Draw") timer
    #endregion GDI+ init

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

    Global $hDownload, $nBytes, $nRead, $nSize, $calc, $file, $url, $current
    Global $speed = 0
    Global $prog = 0
    Global $stop = 0

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

    While Sleep(0x7FFFFF)
    WEnd

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

    Func Disable_Anim()
    $Display_Anim = False
    $Disable_Anim = True
    GUICtrlSetState($Anim_Start, $GUI_UNCHECKED)
    GUICtrlSetState($Anim_Stop, $GUI_UNCHECKED)
    GUICtrlSetState($Anim_Disable, $GUI_CHECKED)
    EndFunc ;==>Disable_Anim

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

    Func Start_Anim()
    $Display_Anim = True
    $Disable_Anim = False
    GUICtrlSetState($Anim_Start, $GUI_CHECKED)
    GUICtrlSetState($Anim_Stop, $GUI_UNCHECKED)
    GUICtrlSetState($Anim_Disable, $GUI_UNCHECKED)
    EndFunc ;==>Start_Anim

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

    Func Stop_Anim()
    $Display_Anim = False
    $Disable_Anim = False
    GUICtrlSetState($Anim_Start, $GUI_UNCHECKED)
    GUICtrlSetState($Anim_Stop, $GUI_CHECKED)
    GUICtrlSetState($Anim_Disable, $GUI_UNCHECKED)
    EndFunc ;==>Stop_Anim

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

    Func _Random($min, $max, $emin, $emax, $int = 0)
    Local $r1 = Random($min, $emin, $int)
    Local $r2 = Random($emax, $max, $int)
    If Random(0, 1, 1) Then Return $r1
    Return $r2
    EndFunc ;==>_Random

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

    Func Select_Folder()
    Local $folder = FileSelectFolder("Select a folder", "", 5)
    If @error Or StringMid($folder, 2, 2) <> ":\" Then Return
    GUICtrlSetData($Input_Save_To, $folder)
    EndFunc ;==>Select_Folder

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

    Func Start_DL()
    Local $mc = MouseGetCursor()
    $url = GUICtrlRead($Input_URL)
    $file = GUICtrlRead($Input_Save_To)
    If $url <> "" And $file <> "" Then
    GUISetOnEvent($GUI_EVENT_CLOSE, "")
    Disable_Buttons()
    GUISetCursor(15, 0, $hGUI)
    Sleep(100)
    $nSize = InetGetSize($url)
    If $nSize < 1 Then
    GUISetCursor($mc, 0, $hGUI)
    Enable_Buttons()
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    MsgBox(16, "Error", "Unable to get file size from server!" & @CRLF & @CRLF & "Check URL or maybe server down!", 15)
    Return
    EndIf
    GUISetCursor($mc, 0, $hGUI)
    $file &= "\" & StringRight($url, StringLen($url) - StringInStr($url, "/", 0, -1)) & ".tmp"
    $hDownload = InetGet($url, $file, 1, 1)
    AdlibRegister("DL_Check", 50)
    $current = 0
    AdlibRegister("DL_Speed", 1000)
    EndIf
    EndFunc ;==>Start_DL

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

    Func DL_Check()
    Local $msg
    If InetGetInfo($hDownload, 2) Or $stop Then
    InetClose($hDownload)
    Enable_Buttons()
    AdlibUnRegister("DL_Check")
    AdlibUnRegister("DL_Speed")
    If $stop Then
    $msg = MsgBox(4 + 48, "Warning", "Download was cancelled!" & @LF & @LF & _
    " Delete incomplete file?", 20)
    Switch $msg
    Case -1, 6
    FileDelete($file)
    If @error Then $msg = MsgBox(16, "Error", "Unable to delete file, maybe locked by another process!" & @CRLF & _
    "Check manually!", 20)
    EndSwitch
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    Else
    GUICtrlSetData($Progress, 100)
    _GUICtrlStatusBar_SetText($StatusBar, $nSize & " / " & $nSize & " bytes (100 % @ " & $speed & " kb/s)")
    FileMove($file, StringLeft($file, StringLen($file) - 4), 9)
    MsgBox(0, "Information", "Download completed!", 20)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    EndIf
    $stop = 0
    GUICtrlSetData($Progress, 0)
    _GUICtrlStatusBar_SetText($StatusBar, "Ready")
    Else
    $nRead = InetGetInfo($hDownload, 0)
    $calc = Int(100 * $nRead / $nSize)
    GUICtrlSetData($Progress, $calc)
    _GUICtrlStatusBar_SetText($StatusBar, $nRead & " / " & $nSize & " bytes (" & $calc & " % @ " & $speed & " kb/s)")
    EndIf
    EndFunc ;==>DL_Check

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

    Func Enable_Buttons()
    GUICtrlSetState($Start_DL, $GUI_ENABLE)
    GUICtrlSetState($Stop_DL, $GUI_DISABLE)
    GUICtrlSetState($Exit, $GUI_ENABLE)
    GUICtrlSetState($Input_Save_To, $GUI_ENABLE)
    GUICtrlSetState($Input_URL, $GUI_ENABLE)
    GUICtrlSetState($Save_To, $GUI_ENABLE)
    EndFunc ;==>Enable_Buttons

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

    Func Disable_Buttons()
    GUICtrlSetState($Start_DL, $GUI_DISABLE)
    GUICtrlSetState($Exit, $GUI_DISABLE)
    GUICtrlSetState($Input_Save_To, $GUI_DISABLE)
    GUICtrlSetState($Input_URL, $GUI_DISABLE)
    GUICtrlSetState($Save_To, $GUI_DISABLE)
    GUICtrlSetState($Stop_DL, $GUI_ENABLE)
    EndFunc ;==>Disable_Buttons

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

    Func DL_Speed()
    $speed = Round(($nRead - $current) / 1024, 2)
    $current = $nRead
    EndFunc ;==>DL_Speed

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

    Func Stop_DL()
    $stop = 1
    EndFunc ;==>Stop_DL

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

    Func _Exit()
    InetClose($hDownload)
    Close_GDIplus()
    GUIDelete($hGUI)
    Exit
    EndFunc ;==>_Exit

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

    #region GDI+
    Func Start_Animation()
    Local $j
    ;draw bubbles
    If $Disable_Anim Then _GDIPlus_GraphicsClear($hGraphic, "0xFF" & $bg_color)
    If $Display_Anim Then
    ;~ _GDIPlus_GraphicsClear($hBackbuffer, "0xFF" & $bg_color)
    _GDIPlus_GraphicsFillRect($hBackbuffer, 0, 0, $width, $height, $hBrush)
    For $j = 0 To $bubbles - 1
    _GDIPlus_GraphicsDrawImage($hBackbuffer, $aData[$j][5], $aData[$j][0], $aData[$j][1])
    Next
    ;calculate new position incl. border collision check
    For $j = 0 To $bubbles - 1
    $aData[$j][0] += $aData[$j][2] ;increase x coordinate with appropriate slope
    $aData[$j][1] += $aData[$j][3] ;increase y coordinate with appropriate slope
    If $aData[$j][0] <= 0 Then ;border collision x left
    $aData[$j][0] = 1
    $aData[$j][2] *= -1
    ElseIf $aData[$j][0] >= $width - $aData[$j][4] Then ;border collision x right
    $aData[$j][0] = $width - ($aData[$j][4] + 1)
    $aData[$j][2] *= -1
    EndIf
    If $aData[$j][1] <= 0 Then ;border collision y top
    $aData[$j][1] = 1
    $aData[$j][3] *= -1
    ElseIf $aData[$j][1] >= $height - $aData[$j][4] - $dh Then ;border collision y bottom
    $aData[$j][1] = $height - ($aData[$j][4] + 1) - $dh
    $aData[$j][3] *= -1
    EndIf
    Next
    Collision_Check()
    EndIf
    If Not $Disable_Anim Then _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $width, $height)
    EndFunc ;==>Start_Animation

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

    Func Collision_Check() ;0:x, 1:y, 2:vx, 3:vy, 4:size, 5:bmp
    Local $Delta_X, $Delta_Y, $Distance, $Matrix11, $Matrix12, $Matrix21, $Matrix22, $Vp1, $Vp2, $Vs1, $Vs2
    For $i = 0 To $bubbles - 1
    For $j = $i + 1 To $bubbles - 1
    If Pixel_Distance($aData[$i][0], $aData[$i][1], $aData[$j][0], $aData[$j][1]) < ($aData[$i][4] + $aData[$j][4]) / 2 Then
    $Delta_X = $aData[$i][0] - $aData[$j][0]
    $Delta_Y = $aData[$i][1] - $aData[$j][1]
    $Distance = Sqrt($Delta_X * $Delta_X + $Delta_Y * $Delta_Y)

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

    $Matrix11 = $Delta_X / $Distance
    $Matrix12 = -$Delta_Y / $Distance
    $Matrix21 = $Delta_Y / $Distance
    $Matrix22 = $Delta_X / $Distance

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

    $Vp1 = $aData[$i][2] * $Matrix11 + $aData[$i][3] * - $Matrix12
    $Vs1 = $aData[$i][2] * - $Matrix21 + $aData[$i][3] * $Matrix22
    $Vp2 = $aData[$j][2] * $Matrix11 + $aData[$j][3] * - $Matrix12
    $Vs2 = $aData[$j][2] * - $Matrix21 + $aData[$j][3] * $Matrix22

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

    If $Vp1 - $Vp2 < 0 Then
    $aData[$i][2] = $Matrix11 + $Vs1 * $Matrix12
    $aData[$i][3] = $Matrix21 + $Vs1 * $Matrix22
    $aData[$j][2] = $Matrix11 + $Vs2 * $Matrix12
    $aData[$j][3] = $Matrix21 + $Vs2 * $Matrix22
    EndIf
    EndIf
    Next
    Next
    EndFunc ;==>Collision_Check

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

    Func Pixel_Distance($x1, $y1, $x2, $y2) ;Pythagoras theorem
    Local $a, $b
    If $x2 = $x1 And $y2 = $y1 Then Return 0
    $a = $y2 - $y1
    $b = $x2 - $x1
    Return Sqrt($a * $a + $b * $b)
    EndFunc ;==>Pixel_Distance

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

    Func Close_GDIplus()
    ;~ AdlibUnRegister("Start_Animation")
    GUIRegisterMsg(0x0113, "")
    _GDIPlus_BrushDispose($hBrush)
    For $i = 0 To $bubbles - 1
    _GDIPlus_BitmapDispose($aData[$i][5])
    Next
    _GDIPlus_GraphicsDispose($hBackbuffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    EndFunc ;==>Close_GDIplus

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

    Func _CreateBubbleBitmap($size = 75, $gradient_start = 0xA0F0C0C0, $gradient_end = 0xA0C0F0C0, $angle1 = 90, $angle2 = 45, $pen1 = 0x55AAAAAF, $pen2 = 0x50FFFFFF)
    Local $ps1 = 2, $ps2 = Int($size / 12)
    Local $hBitmap = _GDIPlus_BitmapCreateFromScan0($size, $size)
    Local $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsSetSmoothingMode($hContext, 2)
    Local $Pen_Border = _GDIPlus_PenCreate($pen1, $ps1)
    Local $Pen_Reflection = _GDIPlus_PenCreate($pen2, $ps2)
    Local $Brush_Gradient = _GDIPlus_CreateLineBrush(0, 0, $size, $size, $gradient_start, $gradient_end)
    _GDIPlus_GraphicsFillEllipse($hContext, 0, 0, $size, $size, $Brush_Gradient)
    _GDIPlus_GraphicsDrawArc($hContext, $size / 3, $size / 5, $size / 2, $size / 2, 10, -$angle1, $Pen_Reflection)
    _GDIPlus_GraphicsDrawArc($hContext, $size / 6, $size / 3.5, $size / 2, $size / 2, -210, -$angle2, $Pen_Reflection)
    _GDIPlus_GraphicsDrawEllipse($hContext, 0, 0, $size - $ps1, $size - $ps1, $Pen_Border)
    _GDIPlus_PenDispose($Pen_Border)
    _GDIPlus_PenDispose($Pen_Reflection)
    _GDIPlus_BrushDispose($Brush_Gradient)
    _GDIPlus_GraphicsDispose($hContext)
    Return $hBitmap
    EndFunc ;==>_CreateBubbleBitmap

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

    Func _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $iStride = 0, $iPixelFormat = 0x0026200A, $pScan0 = 0)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", $iStride, "int", $iPixelFormat, "ptr", $pScan0, "int*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aResult[6]
    EndFunc ;==>_GDIPlus_BitmapCreateFromScan0

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

    Func _GDIPlus_CreateLineBrush($iPoint1X, $iPoint1Y, $iPoint2X, $iPoint2Y, $iArgb1 = 0xFF0000FF, $iArgb2 = 0xFFFF0000, $WrapMode = 0)
    Local $tPoint1, $pPoint1, $tPoint2, $pPoint2, $aRet
    If $iArgb1 = "" Then $iArgb1 = 0xFF0000FF
    If $iArgb2 = "" Then $iArgb2 = 0xFFFF0000
    If $WrapMode = -1 Then $WrapMode = 0
    $tPoint1 = DllStructCreate("float X;float Y")
    $pPoint1 = DllStructGetPtr($tPoint1)
    DllStructSetData($tPoint1, "X", $iPoint1X)
    DllStructSetData($tPoint1, "Y", $iPoint1Y)
    $tPoint2 = DllStructCreate("float X;float Y")
    $pPoint2 = DllStructGetPtr($tPoint2)
    DllStructSetData($tPoint2, "X", $iPoint2X)
    DllStructSetData($tPoint2, "Y", $iPoint2Y)
    $aRet = DllCall($ghGDIPDll, "int", "GdipCreateLineBrush", "ptr", $pPoint1, "ptr", $pPoint2, "int", $iArgb1, "int", $iArgb2, "int", $WrapMode, "int*", 0)
    Return $aRet[6]
    EndFunc ;==>_GDIPlus_CreateLineBrush

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

    Func _GDIPlus_GraphicsSetClipRegion($hGraphics, $hRegion, $iCombineMode = 0)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetClipRegion", "hwnd", $hGraphics, "hwnd", $hRegion, "int", $iCombineMode)
    If @error Then Return SetError(@error, @extended, False)
    Return $aResult[0] = 0
    EndFunc ;==>_GDIPlus_GraphicsSetClipRegion

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

    Func _GDIPlus_RegionCreateFromRect($tRectF)
    Local $pRectF, $aResult
    $pRectF = DllStructGetPtr($tRectF)
    $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateRegionRect", "ptr", $pRectF, "int*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aResult[2]
    EndFunc ;==>_GDIPlus_RegionCreateFromRect

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

    Func _GDIPlus_RegionCombineRect($hRegion, $tRectF, $iCombineMode = 2)
    Local $pRectF, $aResult
    $pRectF = DllStructGetPtr($tRectF)
    $aResult = DllCall($ghGDIPDll, "uint", "GdipCombineRegionRect", "hwnd", $hRegion, "ptr", $pRectF, "int", $iCombineMode)
    If @error Then Return SetError(@error, @extended, False)
    Return $aResult[0] = 0
    EndFunc ;==>_GDIPlus_RegionCombineRect

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

    Func _GDIPlus_RegionDispose($hRegion)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipDeleteRegion", "hwnd", $hRegion)
    If @error Then Return SetError(@error, @extended, False)
    Return $aResult[0] = 0
    EndFunc ;==>_GDIPlus_RegionDispose
    #endregion GDI+

    [/autoit]

    2:

    Spoiler anzeigen
    [autoit]


    ;Coded by UEZ 2010/2011 - thanks to Ximorro for the idea with the bubbles ;)
    #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #AutoIt3Wrapper_UseX64=n
    ;~ #AutoIt3Wrapper_Icon=
    #AutoIt3Wrapper_Res_Description=Simple downloader made with AutoIt
    #AutoIt3Wrapper_Res_Fileversion=0.9.6.0
    #AutoIt3Wrapper_Res_LegalCopyright=UEZ 2010/2011
    #AutoIt3Wrapper_Res_Language=1033
    #AutoIt3Wrapper_Res_Field=Coded by|UEZ
    #AutoIt3Wrapper_Res_Field=Build|2011-01-20 Beta
    #AutoIt3Wrapper_Res_Field=Compile date|%longdate% %time%
    #AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%
    #AutoIt3Wrapper_UseUpx=y
    #AutoIt3Wrapper_UPX_Parameters=--ultra-brute
    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/sf /sv /om /cs=0 /cn=0
    #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_Obfuscated.au3"

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

    #NoTrayIcon
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiStatusBar.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Opt("GUIOnEventMode", 1)
    Opt("MustDeclareVars", 1)
    Opt("GUICloseOnESC", 0)

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

    #region GUI
    Global Const $width = 615, $height = 266
    Global $hGUI = GUICreate("Tiny URL Downloader v0.96 Build 2011-01-20 by UEZ " & ChrW(9996), $width, $height)
    WinSetTrans($hGUI,"", 0xFF);
    Global $bg_color = "E0E0F0"
    GUISetBkColor("0x" & $bg_color, $hGUI)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

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

    Global $hGUI_Child = GUICreate("", $width, $height, 0, 0, $WS_POPUP + $WS_CLIPSIBLINGS, $WS_EX_MDICHILD + $WS_EX_LAYERED, $hGUI)
    GUISetBkColor(0x123456)
    _WinAPI_SetLayeredWindowAttributes($hGUI_Child, 0x123456, 0xFF)

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

    Global $Lx = 3
    Global $Ly = 10
    Global $Lw= $width - 2 * $Lx
    Global $Lh = $height - 48
    Global $Group = GuiCtrlCreateGroup("UEZ'11 ", $Lx, $Ly, $Lw, $Lh, BitOR($GUI_SS_DEFAULT_GROUP, $BS_RIGHT, $BS_FLAT))
    ;~ Global $Group = GuiCtrlCreateGroup("", $Lx, $Ly, $Lw, $Lh, $SS_SUNKEN)
    GUICtrlSetFont(-1, 6, 100, 0)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlSetBkColor($Group, "0x" & $bg_color)
    GUICtrlSetColor(-1, 0x0)

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

    Global $Input_URL = GUICtrlCreateInput("http://translation.autoit.de/autoitinfo/hilfedateien/AutoIt-Hilfe-Deutsch-3.3.6.1-Stand-07_09_10.zip", 64, 24, 497, 21)
    GUICtrlSetTip(-1, "Type in any valid URL address (http://, https://, ftp://)!")
    Global $Label1 = GUICtrlCreateLabel("URL:", 32, 27, 28, 14)
    GUICtrlSetBkColor(-1, "0x" & $bg_color)
    GUICtrlSetFont(-1, 9, 200, 1, "Arial")
    GUICtrlSetColor(-1, 0x0)
    Global $Label2 = GUICtrlCreateLabel("Save to:", 17, 82, 44, 17)
    GUICtrlSetFont(-1, 9, 200, 1, "Arial")
    GUICtrlSetBkColor($Label2, "0x" & $bg_color)
    GUICtrlSetColor(-1, 0x0)
    Global $Start_DL = GUICtrlCreateButton("&Download", 64, 128, 75, 25)
    GUICtrlSetOnEvent(-1, "Start_DL")
    GUICtrlSetTip(-1, "Press Download button to start download")
    Global $Stop_DL = GUICtrlCreateButton("&Cancel", 488, 128, 75, 25)
    GUICtrlSetOnEvent(-1, "Stop_DL")
    GUICtrlSetTip(-1, "Press Cancel button to stop download")
    GUICtrlSetState(-1, $GUI_DISABLE)
    Global $Exit = GUICtrlCreateButton("&Exit", 276, 128, 75, 25)
    GUICtrlSetOnEvent(-1, "_Exit")
    GUICtrlSetTip(-1, "Close program")
    Global $Progress = GUICtrlCreateProgress(8, 182, 598, 32)
    Global $StatusBar = _GUICtrlStatusBar_Create($hGUI_Child)
    _GUICtrlStatusBar_SetText($StatusBar, "Ready")
    Global $aStatusBar = ControlGetPos("", "", $StatusBar)
    Global $dh = $aStatusBar[3] ;get the heigth of the statusbar
    Global $Input_Save_To = GUICtrlCreateInput(@ScriptDir, 64, 80, 410, 21)
    Global $Save_To = GUICtrlCreateButton("&Select Folder", 486, 78)
    GUICtrlSetOnEvent(-1, "Select_Folder")
    GUICtrlSetTip(-1, "Select a folder where you want to save the downloaded file (UNC path not supported yet!)")
    Global $ContextMenu = GUICtrlCreateContextMenu()
    Global $Submenu_Anim = GUICtrlCreateMenu("Animation", $ContextMenu)
    Global $Anim_Start = GUICtrlCreateMenuItem("Start", $Submenu_Anim)
    Global $Anim_Stop = GUICtrlCreateMenuItem("Stop", $Submenu_Anim)
    Global $Anim_Seperator = GUICtrlCreateMenuItem("", $Submenu_Anim)
    Global $Anim_Disable = GUICtrlCreateMenuItem("Disable", $Submenu_Anim)

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

    GUICtrlSetState($Anim_Start, $GUI_CHECKED)
    GUICtrlSetState($Anim_Stop, $GUI_UNCHECKED)
    Global $Display_Anim = True
    Global $Disable_Anim = False
    GUICtrlSetOnEvent($Anim_Start, "Start_Anim")
    GUICtrlSetOnEvent($Anim_Stop, "Stop_Anim")
    GUICtrlSetOnEvent($Anim_Disable, "Disable_Anim")

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

    GUISetState(@SW_SHOW, $hGUI)
    GUISetState(@SW_SHOW, $hGUI_Child)
    ControlFocus($hGUI_Child, "", $Start_DL)

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

    #endregion

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

    #region GDI+ init
    _GDIPlus_Startup()
    Global $i
    Global Const $bubbles = 10, $max_speed = 5, $min_size = 30, $max_size = 70
    Global $aData[$bubbles][6] ;x,y,vx,vy,size,bmp
    For $i = 0 To $bubbles - 1
    $aData[$i][0] = Random(0, $width - $max_size, 1)
    $aData[$i][1] = Random(0, $height - $max_size, 1)
    $aData[$i][2] = _Random(-$max_speed, $max_speed, -1.5, 1.5) ;vx
    $aData[$i][3] = _Random(-$max_speed, $max_speed, -1.5, 1.5) ;vy
    $aData[$i][4] = Random($min_size, $max_size, 1) ;size
    ;~ $aData[$i][5] = _CreateBubbleBitmap($aData[$i][4], "0xA0" & Hex(Random(0xA0A0A0, 0xF0F0F0, 1), 6), "0xA0" & Hex(Random(0x808080, 0xF0F0F0, 1), 6)) ;handle to bitmap
    $aData[$i][5] = _CreateBubbleBitmap($aData[$i][4]) ;handle to bitmap
    Next

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

    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $hGraphic)
    Global $hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    Global $hBrush = _GDIPlus_BrushCreateSolid("0xFF" & $bg_color)
    _GDIPlus_GraphicsClear($hBackbuffer, "0xFF" & $bg_color)

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

    GUIRegisterMsg(0x0113, "Start_Animation") ;$WM_TIMER = 0x0113
    DllCall("User32.dll", "int", "SetTimer", "hwnd", $hGUI, "int", 0, "int", 50, "int", 0) ;set GUIRegisterMsg($WM_TIMER, "Draw") timer
    #endregion GDI+ init

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

    Global $hDownload, $nBytes, $nRead, $nSize, $calc, $file, $url, $current
    Global $speed = 0
    Global $prog = 0
    Global $stop = 0

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

    While Sleep(0x7FFFFF)
    WEnd

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

    Func Disable_Anim()
    $Display_Anim = False
    $Disable_Anim = True
    GUICtrlSetState($Anim_Start, $GUI_UNCHECKED)
    GUICtrlSetState($Anim_Stop, $GUI_UNCHECKED)
    GUICtrlSetState($Anim_Disable, $GUI_CHECKED)
    EndFunc ;==>Disable_Anim

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

    Func Start_Anim()
    $Display_Anim = True
    $Disable_Anim = False
    GUICtrlSetState($Anim_Start, $GUI_CHECKED)
    GUICtrlSetState($Anim_Stop, $GUI_UNCHECKED)
    GUICtrlSetState($Anim_Disable, $GUI_UNCHECKED)
    EndFunc ;==>Start_Anim

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

    Func Stop_Anim()
    $Display_Anim = False
    $Disable_Anim = False
    GUICtrlSetState($Anim_Start, $GUI_UNCHECKED)
    GUICtrlSetState($Anim_Stop, $GUI_CHECKED)
    GUICtrlSetState($Anim_Disable, $GUI_UNCHECKED)
    EndFunc ;==>Stop_Anim

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

    Func _Random($min, $max, $emin, $emax, $int = 0)
    Local $r1 = Random($min, $emin, $int)
    Local $r2 = Random($emax, $max, $int)
    If Random(0, 1, 1) Then Return $r1
    Return $r2
    EndFunc ;==>_Random

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

    Func Select_Folder()
    Local $folder = FileSelectFolder("Select a folder", "", 5)
    If @error Or StringMid($folder, 2, 2) <> ":\" Then Return
    GUICtrlSetData($Input_Save_To, $folder)
    EndFunc ;==>Select_Folder

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

    Func Start_DL()
    Local $mc = MouseGetCursor()
    $url = GUICtrlRead($Input_URL)
    $file = GUICtrlRead($Input_Save_To)
    If $url <> "" And $file <> "" Then
    GUISetOnEvent($GUI_EVENT_CLOSE, "")
    Disable_Buttons()
    GUISetCursor(15, 0, $hGUI)
    Sleep(100)
    $nSize = InetGetSize($url)
    If $nSize < 1 Then
    GUISetCursor($mc, 0, $hGUI)
    Enable_Buttons()
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    MsgBox(16, "Error", "Unable to get file size from server!" & @CRLF & @CRLF & "Check URL or maybe server down!", 15)
    Return
    EndIf
    GUISetCursor($mc, 0, $hGUI)
    $file &= "\" & StringRight($url, StringLen($url) - StringInStr($url, "/", 0, -1)) & ".tmp"
    $hDownload = InetGet($url, $file, 1, 1)
    AdlibRegister("DL_Check", 50)
    $current = 0
    AdlibRegister("DL_Speed", 1000)
    EndIf
    EndFunc ;==>Start_DL

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

    Func DL_Check()
    Local $msg
    If InetGetInfo($hDownload, 2) Or $stop Then
    InetClose($hDownload)
    Enable_Buttons()
    AdlibUnRegister("DL_Check")
    AdlibUnRegister("DL_Speed")
    If $stop Then
    $msg = MsgBox(4 + 48, "Warning", "Download was cancelled!" & @LF & @LF & _
    " Delete incomplete file?", 20)
    Switch $msg
    Case -1, 6
    FileDelete($file)
    If @error Then $msg = MsgBox(16, "Error", "Unable to delete file, maybe locked by another process!" & @CRLF & _
    "Check manually!", 20)
    EndSwitch
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    Else
    GUICtrlSetData($Progress, 100)
    _GUICtrlStatusBar_SetText($StatusBar, $nSize & " / " & $nSize & " bytes (100 % @ " & $speed & " kb/s)")
    FileMove($file, StringLeft($file, StringLen($file) - 4), 9)
    MsgBox(0, "Information", "Download completed!", 20)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    EndIf
    $stop = 0
    GUICtrlSetData($Progress, 0)
    _GUICtrlStatusBar_SetText($StatusBar, "Ready")
    Else
    $nRead = InetGetInfo($hDownload, 0)
    $calc = Int(100 * $nRead / $nSize)
    GUICtrlSetData($Progress, $calc)
    _GUICtrlStatusBar_SetText($StatusBar, $nRead & " / " & $nSize & " bytes (" & $calc & " % @ " & $speed & " kb/s)")
    EndIf
    EndFunc ;==>DL_Check

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

    Func Enable_Buttons()
    GUICtrlSetState($Start_DL, $GUI_ENABLE)
    GUICtrlSetState($Stop_DL, $GUI_DISABLE)
    GUICtrlSetState($Exit, $GUI_ENABLE)
    GUICtrlSetState($Input_Save_To, $GUI_ENABLE)
    GUICtrlSetState($Input_URL, $GUI_ENABLE)
    GUICtrlSetState($Save_To, $GUI_ENABLE)
    EndFunc ;==>Enable_Buttons

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

    Func Disable_Buttons()
    GUICtrlSetState($Start_DL, $GUI_DISABLE)
    GUICtrlSetState($Exit, $GUI_DISABLE)
    GUICtrlSetState($Input_Save_To, $GUI_DISABLE)
    GUICtrlSetState($Input_URL, $GUI_DISABLE)
    GUICtrlSetState($Save_To, $GUI_DISABLE)
    GUICtrlSetState($Stop_DL, $GUI_ENABLE)
    EndFunc ;==>Disable_Buttons

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

    Func DL_Speed()
    $speed = Round(($nRead - $current) / 1024, 2)
    $current = $nRead
    EndFunc ;==>DL_Speed

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

    Func Stop_DL()
    $stop = 1
    EndFunc ;==>Stop_DL

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

    Func _Exit()
    InetClose($hDownload)
    Close_GDIplus()
    GUIDelete($hGUI)
    Exit
    EndFunc ;==>_Exit

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

    #region GDI+
    Func Start_Animation()
    Local $j
    ;draw bubbles
    If $Disable_Anim Then _GDIPlus_GraphicsClear($hGraphic, "0xFF" & $bg_color)
    If $Display_Anim Then
    ;~ _GDIPlus_GraphicsClear($hBackbuffer, "0xFF" & $bg_color)
    _GDIPlus_GraphicsFillRect($hBackbuffer, 0, 0, $width, $height, $hBrush)
    For $j = 0 To $bubbles - 1
    _GDIPlus_GraphicsDrawImage($hBackbuffer, $aData[$j][5], $aData[$j][0], $aData[$j][1])
    Next
    ;calculate new position incl. border collision check
    For $j = 0 To $bubbles - 1
    $aData[$j][0] += $aData[$j][2] ;increase x coordinate with appropriate slope
    $aData[$j][1] += $aData[$j][3] ;increase y coordinate with appropriate slope
    If $aData[$j][0] <= 0 Then ;border collision x left
    $aData[$j][0] = 1
    $aData[$j][2] *= -1
    ElseIf $aData[$j][0] >= $width - $aData[$j][4] Then ;border collision x right
    $aData[$j][0] = $width - ($aData[$j][4] + 1)
    $aData[$j][2] *= -1
    EndIf
    If $aData[$j][1] <= 0 Then ;border collision y top
    $aData[$j][1] = 1
    $aData[$j][3] *= -1
    ElseIf $aData[$j][1] >= $height - $aData[$j][4] - $dh Then ;border collision y bottom
    $aData[$j][1] = $height - ($aData[$j][4] + 1) - $dh
    $aData[$j][3] *= -1
    EndIf
    Next
    Collision_Check()
    EndIf
    If Not $Disable_Anim Then _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $width, $height)
    EndFunc ;==>Start_Animation

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

    Func Collision_Check() ;0:x, 1:y, 2:vx, 3:vy, 4:size, 5:bmp
    Local $Delta_X, $Delta_Y, $Distance, $Matrix11, $Matrix12, $Matrix21, $Matrix22, $Vp1, $Vp2, $Vs1, $Vs2
    For $i = 0 To $bubbles - 1
    For $j = $i + 1 To $bubbles - 1
    If Pixel_Distance($aData[$i][0], $aData[$i][1], $aData[$j][0], $aData[$j][1]) < ($aData[$i][4] + $aData[$j][4]) / 2 Then
    $Delta_X = $aData[$i][0] - $aData[$j][0]
    $Delta_Y = $aData[$i][1] - $aData[$j][1]
    $Distance = Sqrt($Delta_X * $Delta_X + $Delta_Y * $Delta_Y)

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

    $Matrix11 = $Delta_X / $Distance
    $Matrix12 = -$Delta_Y / $Distance
    $Matrix21 = $Delta_Y / $Distance
    $Matrix22 = $Delta_X / $Distance

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

    $Vp1 = $aData[$i][2] * $Matrix11 + $aData[$i][3] * - $Matrix12
    $Vs1 = $aData[$i][2] * - $Matrix21 + $aData[$i][3] * $Matrix22
    $Vp2 = $aData[$j][2] * $Matrix11 + $aData[$j][3] * - $Matrix12
    $Vs2 = $aData[$j][2] * - $Matrix21 + $aData[$j][3] * $Matrix22

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

    If $Vp1 - $Vp2 < 0 Then
    $aData[$i][2] = $Matrix11 + $Vs1 * $Matrix12
    $aData[$i][3] = $Matrix21 + $Vs1 * $Matrix22
    $aData[$j][2] = $Matrix11 + $Vs2 * $Matrix12
    $aData[$j][3] = $Matrix21 + $Vs2 * $Matrix22
    EndIf
    EndIf
    Next
    Next
    EndFunc ;==>Collision_Check

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

    Func Pixel_Distance($x1, $y1, $x2, $y2) ;Pythagoras theorem
    Local $a, $b
    If $x2 = $x1 And $y2 = $y1 Then Return 0
    $a = $y2 - $y1
    $b = $x2 - $x1
    Return Sqrt($a * $a + $b * $b)
    EndFunc ;==>Pixel_Distance

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

    Func Close_GDIplus()
    GUIRegisterMsg(0x0113, "")
    _GDIPlus_BrushDispose($hBrush)
    For $i = 0 To $bubbles - 1
    _GDIPlus_BitmapDispose($aData[$i][5])
    Next
    _GDIPlus_GraphicsDispose($hBackbuffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    EndFunc ;==>Close_GDIplus

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

    Func _CreateBubbleBitmap($size = 75, $gradient_start = 0xA0F0C0C0, $gradient_end = 0xA0C0F0C0, $angle1 = 90, $angle2 = 45, $pen1 = 0x55AAAAAF, $pen2 = 0x50FFFFFF)
    Local $ps1 = 2, $ps2 = Int($size / 12)
    Local $hBitmap = _GDIPlus_BitmapCreateFromScan0($size, $size)
    Local $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsSetSmoothingMode($hContext, 2)
    Local $Pen_Border = _GDIPlus_PenCreate($pen1, $ps1)
    Local $Pen_Reflection = _GDIPlus_PenCreate($pen2, $ps2)
    Local $Brush_Gradient = _GDIPlus_CreateLineBrush(0, 0, $size, $size, $gradient_start, $gradient_end)
    _GDIPlus_GraphicsFillEllipse($hContext, 0, 0, $size, $size, $Brush_Gradient)
    _GDIPlus_GraphicsDrawArc($hContext, $size / 3, $size / 5, $size / 2, $size / 2, 10, -$angle1, $Pen_Reflection)
    _GDIPlus_GraphicsDrawArc($hContext, $size / 6, $size / 3.5, $size / 2, $size / 2, -210, -$angle2, $Pen_Reflection)
    _GDIPlus_GraphicsDrawEllipse($hContext, 0, 0, $size - $ps1, $size - $ps1, $Pen_Border)
    _GDIPlus_PenDispose($Pen_Border)
    _GDIPlus_PenDispose($Pen_Reflection)
    _GDIPlus_BrushDispose($Brush_Gradient)
    _GDIPlus_GraphicsDispose($hContext)
    Return $hBitmap
    EndFunc ;==>_CreateBubbleBitmap

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

    Func _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $iStride = 0, $iPixelFormat = 0x0026200A, $pScan0 = 0)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", $iStride, "int", $iPixelFormat, "ptr", $pScan0, "int*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aResult[6]
    EndFunc ;==>_GDIPlus_BitmapCreateFromScan0

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

    Func _GDIPlus_CreateLineBrush($iPoint1X, $iPoint1Y, $iPoint2X, $iPoint2Y, $iArgb1 = 0xFF0000FF, $iArgb2 = 0xFFFF0000, $WrapMode = 0)
    Local $tPoint1, $pPoint1, $tPoint2, $pPoint2, $aRet
    If $iArgb1 = "" Then $iArgb1 = 0xFF0000FF
    If $iArgb2 = "" Then $iArgb2 = 0xFFFF0000
    If $WrapMode = -1 Then $WrapMode = 0
    $tPoint1 = DllStructCreate("float X;float Y")
    $pPoint1 = DllStructGetPtr($tPoint1)
    DllStructSetData($tPoint1, "X", $iPoint1X)
    DllStructSetData($tPoint1, "Y", $iPoint1Y)
    $tPoint2 = DllStructCreate("float X;float Y")
    $pPoint2 = DllStructGetPtr($tPoint2)
    DllStructSetData($tPoint2, "X", $iPoint2X)
    DllStructSetData($tPoint2, "Y", $iPoint2Y)
    $aRet = DllCall($ghGDIPDll, "int", "GdipCreateLineBrush", "ptr", $pPoint1, "ptr", $pPoint2, "int", $iArgb1, "int", $iArgb2, "int", $WrapMode, "int*", 0)
    Return $aRet[6]
    EndFunc ;==>_GDIPlus_CreateLineBrush

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

    Func _GDIPlus_GraphicsSetClipRegion($hGraphics, $hRegion, $iCombineMode = 0)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetClipRegion", "hwnd", $hGraphics, "hwnd", $hRegion, "int", $iCombineMode)
    If @error Then Return SetError(@error, @extended, False)
    Return $aResult[0] = 0
    EndFunc ;==>_GDIPlus_GraphicsSetClipRegion

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

    Func _GDIPlus_RegionCreateFromRect($tRectF)
    Local $pRectF, $aResult
    $pRectF = DllStructGetPtr($tRectF)
    $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateRegionRect", "ptr", $pRectF, "int*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aResult[2]
    EndFunc ;==>_GDIPlus_RegionCreateFromRect

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

    Func _GDIPlus_RegionCombineRect($hRegion, $tRectF, $iCombineMode = 2)
    Local $pRectF, $aResult
    $pRectF = DllStructGetPtr($tRectF)
    $aResult = DllCall($ghGDIPDll, "uint", "GdipCombineRegionRect", "hwnd", $hRegion, "ptr", $pRectF, "int", $iCombineMode)
    If @error Then Return SetError(@error, @extended, False)
    Return $aResult[0] = 0
    EndFunc ;==>_GDIPlus_RegionCombineRect

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

    Func _GDIPlus_RegionDispose($hRegion)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipDeleteRegion", "hwnd", $hRegion)
    If @error Then Return SetError(@error, @extended, False)
    Return $aResult[0] = 0
    EndFunc ;==>_GDIPlus_RegionDispose
    #endregion GDI+

    [/autoit]
    Zitat


    1. , würde ich das Tool öfters als Downloader nutzen, würde ich es vermutlich ein wenig aufbohren, was den abgebrochenen Download angeht ( auch wenn mir klar ist, dass das Beispiel in erster Linie aufzeigen sollte, wie ein Abbruch eingebaut werden kann ) . Ich würde analog anderen Programmen vielleicht hingehen und der Datei während des Downloads einen temporären Dateinamen im Zielverzeichnis geben a la filename.exe.part und erst, wenn die Datei komplett durchlaufen ist in den Originalnamen umbenennen.


    Das mit der temp. Datei ist erst jetzt implementiert. Die Resume Funktion muss ich erstmal nachforschen, wenn ich Zeit habe.

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯