v1.1
DownloadFile(UrlToFile, SaveFileAs, Overwrite := True, UseProgressBar := True) { ;Check if the file already exists and if we must not overwrite it If (!Overwrite && FileExist(SaveFileAs)) Return ;Check if the user wants a progressbar If (UseProgressBar) { ;Initialize the WinHttpRequest Object WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1") ;Download the headers WebRequest.Open("HEAD", UrlToFile) WebRequest.Send() ;Store the header which holds the file size in a variable: FinalSize := WebRequest.GetResponseHeader("Content-Length") ;Create the progressbar and the timer Progress, H80, , Downloading..., %UrlToFile% SetTimer, __UpdateProgressBar, 100 } ;Download the file UrlDownloadToFile, %UrlToFile%, %SaveFileAs% ;Remove the timer and the progressbar because the download has finished If (UseProgressBar) { Progress, Off SetTimer, __UpdateProgressBar, Off } Return ;The label that updates the progressbar __UpdateProgressBar: ;Get the current filesize and tick CurrentSize := FileOpen(SaveFileAs, "r").Length ;FileGetSize wouldn't return reliable results CurrentSizeTick := A_TickCount ;Calculate the downloadspeed Speed := Round((CurrentSize/1024-LastSize/1024)/((CurrentSizeTick-LastSizeTick)/1000)) . " Kb/s" ;Save the current filesize and tick for the next time LastSizeTick := CurrentSizeTick LastSize := FileOpen(SaveFileAs, "r").Length ;Calculate percent done PercentDone := Round(CurrentSize/FinalSize*100) ;Update the ProgressBar Progress, %PercentDone%, %PercentDone%`% Done, Downloading... (%Speed%), Downloading %SaveFileAs% (%PercentDone%`%) Return }Examples of usage:
Screenshot:
Older versions:
Changelog:
I hope anyone of you finds this usefull. Tell me if you have ideas for improvement.

edit:
Check out this post:
http://www.autohotke...ar/#entry630902
an even shorter example!