Autoit Downloader Problem

  • Hallo
    habe ein script das mir eine exe runterladet als beispiel habe ich die autoit exe genommen normaler weise ist das eine exe unter 1 mb ^^
    also
    wen man start drückt ladet es das script runter aber bei der autoit.exe läd es nichtmal bis zur hälfte und dann ist es fertig und bei der unter 1 mb exe ladet das ding nichtmal ^^
    was mache ich falsch

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <GUIConstantsEx.au3>

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

    Global $averagearr[1], $buffer = 0,$iFileSize

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

    $Form1 = GUICreate("test", 291, 133, 447, 275)
    $Label1 = GUICtrlCreateLabel("test", 96, 8, 99, 17)
    $Progress1 = GUICtrlCreateProgress(8, 32, 278, 25)
    $Label2 = GUICtrlCreateLabel("Zeit:", 16, 72, 97, 17)
    $Label3 = GUICtrlCreateLabel("KB/s", 144, 72, 132, 17)
    $Button1 = GUICtrlCreateButton("Start", 16, 104, 75, 25, 0)
    $Button2 = GUICtrlCreateButton("Exit", 184, 104, 75, 25, 0)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    Download ()
    Case $Button2
    Exit
    EndSwitch
    WEnd

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

    Func Download ()

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

    $speedaktual = 2
    ; $speedaktual = 1

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

    $url = "http://www.autoitscript.com/cgi-bin/getfile.pl?autoit3/autoit-v3-setup.exe"
    Global $iFileSize = InetGetSize($url)
    InetGet($url, "test.exe", 1, 1)

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

    $time = TimerInit()
    While @InetGetActive
    $iLastKbits = @InetGetBytesRead / 1024
    Sleep($speedaktual * 100)
    $iNewKbits = @InetGetBytesRead / 1024
    $speed = ($iNewKbits - $iLastKbits) / ($speedaktual / 10)
    $iPercent = Round(@InetGetBytesRead / $iFileSize * 100)
    GUICtrlSetData ($Progress1,$iPercent)
    GUICtrlSetData ($Label2,"Zeit: " & _average($speed) & " sec")
    GUICtrlSetData ($Label3,$speed & ";KB/s")
    ; ProgressSet($iPercent, " Noch " & _average($speed) _ ; <-- hier übergabeparameter
    ; & " sec ; " & ' ' & $speed & ' Kb/s')
    WEnd
    Exit
    EndFunc

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

    Func _average($a) ; average (eng.) = durchschnitt
    If $a <> 0 Then ; wenn der Übergabeparameter $a (= geschwindigkeit) <> 0 ist, dann
    _ArrayAdd($averagearr, $a) ; aktuelle Geschwindigkeit wird in ein Array geschrieben
    For $i = 1 To UBound($averagearr) - 1
    $buffer += $averagearr[$i] ; alle Werte im Array werden zueinander addiert
    Next
    $buffer /= UBound($averagearr) - 1 ; Durchschnitt der Addierten Werte wird ausgerechnet
    $buffer2 = $buffer ; <-- könnte man vielleicht schöner machen, $buffer muss vorm return geleert werden, deshalb $buffer2
    $buffer = 0 ; wie gesagt, buffer muss geleert werden ...
    Return Round((($iFileSize - @InetGetBytesRead) / 1024) / $buffer2) ; die Formel lautet: v = kb/s , also s = kb/v
    ; die kb sind die noch verbleibenden Kbyte.
    ; Die Geschwindigkeit ist schon ausgerechnet (Durchschnitt)
    EndIf
    EndFunc ;==>_average

    [/autoit]
  • Hallo 'kloo',

    ich weis das der download geht aber der ladebalken ladet nicht zu ende
    aber wen du jetz auf ein ftp server irgent was hochladest das ca 500 kb verbraucht dann ladet es nichtmal


    dann wird wohl deine Formel für den Fortschritt nicht stimmen.

    Formel: FortshchrittInPozent = FortschrittAbsolut / Gesamt * 100

    Auch must du immer in der gleichen Einheit rechnen (nicht einmal in Bytes und 1 mal in KBytes

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (20. Mai 2009 um 02:25)

  • Hallo kloo,

    ich habe die formel nicht gemacht :D
    dafür bin ich zu doof ^^
    habe das umgeschriben von einem beispiel
    also nur die form

    Die Formel ist richtig, wenn auch in umgestellter Form Edit1: die Einheiten stimmen auch, hatte mich verlesen daher in Spoiler verbannt

    Spoiler anzeigen

    aber hast du den 2. Tipp auch schon überprüft:

    Zitat

    Auch must du immer in der gleichen Einheit rechnen (nicht einmal in Bytes und 1 mal in KBytes

    [autoit]

    Global $iFileSize = InetGetSize($url);

    [/autoit]
    Zitat

    Auszug aus dt. Hilfe: InetGetSize
    Gibt die Größe einer im Internet gespeicherten Datei (in Bytes) zurück.
    aber

    [autoit]

    $iNewKbits = @InetGetBytesRead / 1024

    [/autoit]

    hier teilst du durch 1024 => KBytes

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (19. Mai 2009 um 22:05)