#include #include ;=============================================================================== #API "Windows Progress Dialog" ; IProgressDialog ;=============================================================================== Global Const $PROGDLG_NORMAL = 0x00000000 ;default normal progress dlg behavior Global Const $PROGDLG_MODAL = 0x00000001 ; the dialog is modal to its hwndParent (default is modeless) Global Const $PROGDLG_AUTOTIME = 0x00000002 ; automatically updates the "Line3" text with the "time remaining" (you cant call SetLine3 if you passs this!) Global Const $PROGDLG_NOTIME = 0x00000004 ; we dont show the "time remaining" if this is set. We need this if dwTotal < dwCompleted for sparse files Global Const $PROGDLG_NOMINIMIZE = 0x00000008 ; Do not have a minimize button in the caption bar. Global Const $PROGDLG_NOPROGRESSBAR = 0x00000010 ; Don't display the progress bar Global Const $PROGDLG_MARQUEEPROGRESS = 0x00000020 ; Vista and above only Global Const $PROGDLG_NOCANCEL = 0x00000040 ; Vista and above only Global Const $PDTIMER_RESET = 0x00000001 Global Const $PDTIMER_PAUSE = 0x00000002 Global Const $PDTIMER_RESUME = 0x00000003 Global Const $AVI_SEARCH = 150 Global Const $AVI_SEARCH_DOC = 151 Global Const $AVI_SEARCH_PC = 152 Global Const $AVI_MOVE = 160 Global Const $AVI_COPY = 161 Global Const $AVI_DELETE = 162 Global Const $AVI_EMPTY_RECYCLEBIN = 163 Global Const $AVI_DELETE_DIRECT = 164 Global Const $AVI_COPY_DOC = 165 Global Const $AVI_SEARCH_IE = 166 Global Const $AVI_MOVE_OLD = 167 Global Const $AVI_COPY_OLD = 168 Global Const $AVI_DELETE_DIRECT_OLD = 169 Global Const $AVI_DOWNLOAD = 170 ;=============================================================================== #interface "IProgressDialog" Global Const $sCLSID_IProgressDialog = "{F8383852-FCD3-11d1-A6B9-006097DF5BD4}" Global Const $sIID_IProgressDialog = "{EBBC7C04-315E-11d2-B62F-006097DF5BD4}" ; Definition Global Const $dtagIProgressDialog = $dtagIUnknown & _ "StartProgressDialog hresult(hwnd;ptr;dword;ptr);" & _ "StopProgressDialog hresult();" & _ "SetTitle hresult(wstr);" & _ "SetAnimation hresult(handle;uint);" & _ "HasUserCancelled int();" & _ "SetProgress hresult(dword;dword);" & _ "SetProgress64 hresult(uint64;uint64);" & _ "SetLine hresult(dword;wstr;int;ptr);" & _ "SetCancelMsg hresult(wstr;ptr);" & _ "Timer hresult();" ; List Global Const $ltagIProgressDialog = $ltagIUnknown & _ "StartProgressDialog;" & _ "StopProgressDialog;" & _ "SetTitle;" & _ "SetAnimation;" & _ "HasUserCancelled;" & _ "SetProgress;" & _ "SetProgress64;" & _ "SetLine;" & _ "SetCancelMsg;" & _ "Timer;" ;=============================================================================== _AutoItObject_StartUp() Global $FileToDownload = "http://www.autoitscript.com/cgi-bin/getfile.pl?autoit3/autoit-v3-setup.exe" Global $FileDestination = @ScriptDir & "/autoit-v3-setup.exe" Global $oDlg = _AutoItObject_ObjCreate($sCLSID_IProgressDialog, $sIID_IProgressDialog, $dtagIProgressDialog) $oDlg.SetTitle("Downloading...") $oDlg.SetAnimation(Number(_WinAPI_GetModuleHandle("shell32.dll")), $AVI_DOWNLOAD) $oDlg.SetLine(1, "autoit-v3-setup.exe from www.autoitscript.com", 0, 0) $oDlg.StartProgressDialog(0, 0, $PROGDLG_NOMINIMIZE, 0) Global $FileSize = InetGetSize($FileToDownload) Global $hDownload = InetGet($FileToDownload, $FileDestination, 1, 1) Global $Loaded, $Loaded_old[6], $TimeConstant = 100000 Global $dwCompleted = 0 Global $Diff, $Start = TimerInit() Do Sleep(500) $Diff = TimerDiff($Start) $dwCompleted = StringFormat("%.0f", $Diff / 100) $Canceled = $oDlg.HasUserCancelled() $Loaded = InetGetInfo($hDownload, -1) $TimeConstant = StringFormat("%.0f", 1 / (($Loaded[0] - $Loaded_old[0]) * 2) * ($FileSize - $Loaded[0]) * 10) + $dwCompleted $oDlg.SetProgress($dwCompleted, $TimeConstant) $oDlg.SetLine(2, StringFormat("%.0f %% from %.2f MB (%.0f kB/sec)", $Loaded[0] / $FileSize * 100, $FileSize / (1024 * 1024), ($Loaded[0] - $Loaded_old[0]) * 2 / 1024), 0, 0) $Loaded_old = $Loaded Until $Canceled[0] = 1 Or $Loaded[2] InetClose($hDownload) $oDlg.StopProgressDialog() If $Loaded[2] Then MsgBox(64, "Info", "File successfully downloaded") Else FileDelete($FileDestination) MsgBox(16, "Error", "The download was aborted") EndIf _AutoItObject_Shutdown()