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, W400 H110 ZX20 ZY20 WM500 M T, , Downloading...`n, %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%, , Downloading patch file at %Speed%`n(%SaveFileAs%), Singularity Updater (%PercentDone%`%) Return }