Ich halte es für unwahrscheinlich, dass es mit InetGet geht. Mit WinHTTP eventuell. Und mit TCP bestimmt. Aber ich weiß leider nicht, ob da irdgenwo die Daten in einem Buffer gespeichert werden. Wenn das der Fall ist, dann könnte ich dir nur sagen, wie man die Geschwindigkeit mit der die Daten aus diesem Zwischenspeicher in eine Datei kopiert werden reguliert. Die Downloadgeschwindigkeit würde dann gleich bleiben.
Ich hab mal ein Beispiel für WinHTTP geschrieben. Das scheint zu funktionieren.
Spoiler anzeigen
#include <WinHTTP.au3>
#include <Array.au3>
; -Author: name22(http://www.autoit.de)
[/autoit] [autoit][/autoit] [autoit]$nSpeedLimit = 300 ;Bytes per Second
$iBytesPerStep = 8192 ;Number of Bytes read every iteration - does not affect speed
$iSleepTime = Round($iBytesPerStep / $nSpeedLimit)
$sURL_Download = 'http://translation.autoit.de/autoitinfo/hilfedateien/AutoIt-Hilfe-Deutsch-3.3.6.1-Stand-27_05_11.zip'
$sPathDst = @DesktopDir
$vNTdll = DllOpen("ntdll.dll")
[/autoit] [autoit][/autoit] [autoit]$tPrecSleep = DllStructCreate("int64 time;")
$pPrecSleep = DllStructGetPtr($tPrecSleep)
$aURL_Split = _WinHttpCrackUrl($sURL_Download)
[/autoit] [autoit][/autoit] [autoit]$hOpen = _WinHttpOpen()
$hConnect = _WinHttpConnect($hOpen, $aURL_Split[2])
$hRequest = _WinHttpOpenRequest($hConnect, "GET", $aURL_Split[6])
_WinHttpSendRequest($hRequest)
_WinHttpReceiveResponse($hRequest)
$iSizeBytes = _WinHttpQueryHeaders($hRequest, $WINHTTP_QUERY_CONTENT_LENGTH)
[/autoit] [autoit][/autoit] [autoit]$nT2 = TimerInit()
Switch _WinHttpQueryDataAvailable($hRequest)
Case True
$vData = Binary("")
$nT = TimerInit()
Do
DllStructSetData($tPrecSleep, "time", -10000 * ($iSleepTime - TimerDiff($nT)))
DllCall($vNTdll, "dword", "ZwDelayExecution", "int", 0, "ptr", $pPrecSleep)
$nT = TimerInit()
$vData &= _WinHttpReadData($hRequest, 2, $iBytesPerStep)
Until @error
_WinHttpCloseHandle($hRequest)
_WinHttpCloseHandle($hConnect)
_WinHttpCloseHandle($hOpen)
$hFile = FileOpen($sPathDst & "\" & StringTrimLeft($aURL_Split[6], StringInStr($aURL_Split[6], "/", 0, -1)), 18)
FileWrite($hFile, $vData)
FileClose($hFile)
MsgBox(64, "Info", "Download completed." & @CRLF & "Time: " & Int(TimerDiff($nT2)) & @CRLF & "Speed: " & $iSizeBytes / Int(TimerDiff($nT2)))
Case False
MsgBox(16, "Error", "No Data available.")
EndSwitch
DllClose($vNTdll)
[/autoit]