Downloaddetails

  • Naja, du weist die Größe der Datei (InetGetBytes) und du weißt wieviel du schon hast (@InetGetBytesRead), also weißt du, wieviel du noch brauchst.
    Außerdem weist du die Zeit, die der Download schon gebraucht hat, also weist du den Speed...
    Das kannst du ja dann hochrechnen..

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • der Rest ist nur noch ein Dividieren durch 1000 / 60 / 24
    und der Abfrage, ob der jeweilige Wert größer 0,

    damit nicht da steht 0 Stunden und 0 Minuten ...

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Das sollte erstmal funzen, es ermittelt die restliche Zeit in Millisekunden...
    Kanns grad nicht testen, aber es müsste gehen...

    [autoit]


    InetGet($url,$ziel)
    $starttime=TimerInit()
    $size=InetGetSize($url)
    AdlibEnable("_CheckDownloadDetails",1000)
    Func _CheckDownloadDetails()
    $needed=$size-@InetGetBytesRead
    $speed=@InetGetBytesRead/TimerDiff($starttime)
    $time=$needed/$speed
    EndFunc

    [/autoit]

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Ich habe hier mal ein Beispiel für die neue Beta:

    Spoiler anzeigen
    [autoit]

    ;#BETA
    ; Author: Prog@ndy
    #include<Date.au3>

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

    HotKeySet("{ESC}", "_Abbrechen")
    $Quelle = "http://download.mozilla.org/?product=firefox-3.5.1&os=win&lang=de"
    $Ziel = @DesktopDir & "\testff.exe"
    $InetGetHandle = InetGet($Quelle, $Ziel, 1, 1)
    Global $Timer = TimerInit(), $Timer0 = TimerInit()
    Global $LastRead = 0, $NewRead = 0, $TotalSize = InetGetInfo($InetGetHandle, 1)
    Global $kBs = 0

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

    While InetGetInfo() ; Solange es aktive Downloads gibt

    If TimerDiff($Timer) >= 999 Then
    $Timer = TimerInit()
    $NewRead = InetGetInfo($InetGetHandle, 0)
    $kBs = ($NewRead-$LastRead)/1024
    $LastRead = $NewRead
    EndIf

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

    $remainingTime = _FormatTime(Round(($TotalSize-$NewRead)/1024/$kBs))

    ToolTip( _
    "Quelle: " & $Quelle & @CRLF & _
    "Ziel: " & $Ziel & @CRLF & _
    "Geschwindigkeit: " & $kBs & " kB/s" & @CRLF & _
    "Vergangene Zeit: " & _FormatTime(TimerDiff($Timer0)/1000) & @CRLF & _
    "Verbleibende Zeit: " & $remainingTime & @CRLF , _
    Default, Default, _
    "Download:")

    Sleep(100)
    WEnd

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

    InetClose($InetGetHandle)

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

    Func _FormatTime($Secs)
    ; Prog@ndy
    Local $H, $M, $S
    _TicksToTime($Secs*1000, $H, $M, $S)
    Local $String = ""
    If $H Then $String &= $H & " Stunden "
    If $H Or $M Then $String &= $M & " Minuten "
    If $H Or $M Or $S Then $String &= $S & " Sekunden "
    Return StringTrimRight($String,1)
    EndFunc

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

    Func _Abbrechen()
    InetClose($InetGetHandle)
    FileDelete($Ziel)
    MsgBox(0, '', "Download abgebrochen")
    EndFunc

    [/autoit]


    Und für die stabile Version:

    Spoiler anzeigen
    [autoit]

    ; Author: Prog@ndy
    #include<Date.au3>

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

    HotKeySet("{ESC}", "_Abbrechen")
    $Quelle = "http://download.mozilla.org/?product=firefox-3.5.1&os=win&lang=de"
    $Ziel = @DesktopDir & "\testff.exe"
    InetGet($Quelle, $Ziel, 1, 1)
    Global $Timer = TimerInit(), $Timer0 = TimerInit()
    Global $LastRead = 0, $NewRead = 0, $TotalSize = InetGetSize($Quelle)
    Global $kBs = 1

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

    While @InetGetActive ; Solange es aktive Downloads gibt

    If TimerDiff($Timer) >= 999 Then
    $Timer = TimerInit()
    $NewRead = @InetGetBytesRead
    $kBs = ($NewRead-$LastRead)/1024
    $LastRead = $NewRead
    EndIf

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

    $remainingTime = _FormatTime(Round(($TotalSize-$NewRead)/1024/$kBs))

    ToolTip( _
    "Quelle: " & $Quelle & @CRLF & _
    "Ziel: " & $Ziel & @CRLF & _
    "Geschwindigkeit: " & $kBs & " kB/s" & @CRLF & _
    "Vergangene Zeit: " & _FormatTime(TimerDiff($Timer0)/1000) & @CRLF & _
    "Verbleibende Zeit: " & $remainingTime & @CRLF , _
    Default, Default, _
    "Download:")

    Sleep(100)
    WEnd

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

    Func _FormatTime($Secs)
    ; Prog@ndy
    Local $H, $M, $S
    _TicksToTime($Secs*1000, $H, $M, $S)
    Local $String = ""
    If $H Then $String &= $H & " Stunden "
    If $H Or $M Then $String &= $M & " Minuten "
    If $H Or $M Or $S Then $String &= $S & " Sekunden "
    Return StringTrimRight($String,1)
    EndFunc

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

    Func _Abbrechen()
    InetGet("abort")
    FileDelete($Ziel)
    MsgBox(0, '', "Download abgebrochen")
    EndFunc

    [/autoit]
  • naja wenn man schneller aktualisieren will gibt es auch noch was anderes

    hat letztn einer auf meine frage gepostet und habe ich verwendet. ist eig ganz ok

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <array.au3>

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

    Global $averagearr[1], $buffer = 0
    $aktuel = 2
    $Form1 = GUICreate("Lade datei runter! Ready...", 604, 81, 0, 0)
    $Progress1 = GUICtrlCreateProgress(15, 10, 561, 36)
    $Label1 = GUICtrlCreateLabel("", 15, 55, 566, 17)
    GUISetState(@SW_SHOW)

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

    $FileSize = InetGetSize("url")
    InetGet("url","C:\datei.datei",1,1)
    $curSize = 0
    $curFileSize = 0
    sleep(2500)
    While @InetGetActive
    If GUIGetMsg() = $GUI_EVENT_CLOSE Then InetGet("abort")
    $iLastKbits = @InetGetBytesRead / 1024
    Sleep($aktuel *100)
    $curFileSize = @InetGetBytesRead
    $iNewKbits = $curFileSize / 1024
    $speed = ($iNewKbits - $iLastKbits) / ($aktuel / 10)
    GUICtrlSetData($Progress1, $curSize)
    $curSize = $curFileSize * 100
    $curSize = $curSize / $FileSize
    $curSize = Ceiling($curSize)
    $curFileSize = Round($curFileSize / 1024 / 1024, 1)
    WinSetTitle($Form1, "","Fertiggestellt: " & $curSize & "%")
    GUICtrlSetData($Label1, $curFileSize & " MB - " & Round($FileSize / 1024 / 1024, 1) & " MB (" & $curSize & "%) Zeit: " & round(_average($speed) / 60,0) & " Minuten" & " " & $speed & ' Kb/s')

    WEnd

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

    Func _average($a)
    If $a <> 0 Then
    _ArrayAdd($averagearr, $a)
    For $i = 1 To UBound($averagearr) - 1
    $buffer += $averagearr[$i]
    Next
    $buffer /= UBound($averagearr) - 1
    $buffer2 = $buffer
    $buffer = 0
    Return Round((($FileSize - $curFileSize) / 1024) / $buffer2)

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

    EndIf

    EndFunc ;==>_average

    [/autoit]

    klappt sehr gut ...