Sign in to follow this  
Followers 0
guinness

_InetGetGUI() and _InetGetProgress()

1 post in this topic

#1 ·  Posted (edited)

This is just a 2014 update of  >_InetGetGUI() and >_InetGetProgress(). I have purposely left the original examples untouched just for nostalgic purposes.

 

_InetGetGUI() Example and Function:

#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w 7

#include <GUIConstantsEx.au3>
#include <InetConstants.au3>
#include <MsgBoxConstants.au3>
#include <StringConstants.au3>

Example()

Func Example()
    Local $hGUI = GUICreate('_InetGetGUI()', 370, 90)
    Local $iLabel = GUICtrlCreateLabel('Welcome to the simple downloader', 5, 5, 270, 40)
    Local $iStartClose = GUICtrlCreateButton('&Download', 275, 2.5, 90, 25)
    Local $iProgressBar = GUICtrlCreateProgress(5, 60, 360, 20)
    GUISetState(@SW_SHOW, $hGUI)

    Local $sFilePath = '', $sFilePathURL = 'http://ipv4.download.thinkbroadband.com/5MB.zip'
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop

            Case $iStartClose
                $sFilePath = _InetGetGUI($sFilePathURL, $iLabel, $iProgressBar, $iStartClose, @TempDir)
                Switch @error ; Check what the actual error was.
                    Case 1 ; $INETGET_ERROR_1
                        MsgBox($MB_SYSTEMMODAL, 'Error', 'Check the URL or your Internet connection is working.')

                    Case 2 ; $INETGET_ERROR_2
                        MsgBox($MB_SYSTEMMODAL, 'Fail', 'It appears the user interrupted the download.')

                    Case Else
                        MsgBox($MB_SYSTEMMODAL, 'Success', 'Successfully downloaded "' & $sFilePath & '"')

                EndSwitch

        EndSwitch
    WEnd

    GUIDelete($hGUI)
EndFunc   ;==>Example

; #FUNCTION# ====================================================================================================================
; Name ..........: _InetGetGUI
; Description ...: Download a file updating a GUICtrlCreateProgress()
; Syntax ........: _InetGetGUI($sURL, $iLabel, $iProgress, $iButton[, $sDirectory = @ScriptDir])
; Parameters ....: $sURL                - A valid URL that contains the filename too
;                  $iLabel              - ControlID of a GUICtrlCreateLabel comtrol.
;                  $iProgress           - ControlID of a GUICtrlCreateProgress control.
;                  $iButton             - ControlID of a GUICtrlCreateButton control.
;                  $sDirectory          - [optional] Directory of where to download. Default is @ScriptDir.
; Return values .: Success - Downloaded filepath.
;                  Failure - Blank string & sets @error to non-zero
; Author ........: guinness
; Example .......: Yes
; ===============================================================================================================================
Func _InetGetGUI($sURL, $iLabel, $iProgress, $iButton, $sDirectory = @ScriptDir)
    Local Enum $INETGET_ERROR_0, $INETGET_ERROR_1, $INETGET_ERROR_2
    Local $sFilePath = StringRegExpReplace($sURL, '^.*/', '')
    If StringStripWS($sFilePath, $STR_STRIPALL) == '' Then
        Return SetError($INETGET_ERROR_1, 0, $sFilePath)
    EndIf

    $sFilePath = StringRegExpReplace($sDirectory, '[\\/]+$', '') & '\' & $sFilePath
    Local $iFileSize = InetGetSize($sURL, $INET_FORCERELOAD)
    Local $hDownload = InetGet($sURL, $sFilePath, $INET_LOCALCACHE, $INET_DOWNLOADBACKGROUND)

    Local Const $iRound = 0
    Local $iBytesRead = 0, $iPercentage = 0, $iSpeed = 0, _
            $sProgressText = '', $sSpeed = 'Current speed: ' & _ByteSuffix($iBytesRead - $iSpeed) & '/s'
    Local $hTimer = TimerInit()

    Local $iError = $INETGET_ERROR_0, _
            $sRead = GUICtrlRead($iButton)

    GUICtrlSetData($iButton, '&Cancel')
    While Not InetGetInfo($hDownload, $INET_DOWNLOADCOMPLETE)
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE, $iButton
                GUICtrlSetData($iLabel, 'Download cancelled.')
                $iError = $INETGET_ERROR_2
                ExitLoop
        EndSwitch

        $iBytesRead = InetGetInfo($hDownload, $INET_DOWNLOADREAD)
        $iPercentage = $iBytesRead * 100 / $iFileSize
        $sProgressText = 'Downloading ' & _ByteSuffix($iBytesRead, $iRound) & ' of ' & _ByteSuffix($iFileSize, $iRound) & @CRLF & $sSpeed

        GUICtrlSetData($iLabel, $sProgressText)
        GUICtrlSetData($iProgress, $iPercentage)

        If TimerDiff($hTimer) >= 1000 Then
            $sSpeed = 'Current speed: ' & _ByteSuffix($iBytesRead - $iSpeed) & '/s'
            $iSpeed = $iBytesRead
            $hTimer = TimerInit()
        EndIf
        Sleep(20)
    WEnd

    InetClose($hDownload)
    GUICtrlSetData($iButton, $sRead)

    If $iError > $INETGET_ERROR_0 Then
        FileDelete($sFilePath)
        $sFilePath = ''
    EndIf
    Return SetError($iError, 0, $sFilePath)
EndFunc   ;==>_InetGetGUI

Func _ByteSuffix($iBytes, $iRound = 2) ; By Spiff59
    Local Const $aArray[9] = [' bytes', ' KB', ' MB', ' GB', ' TB', ' PB', ' EB', ' ZB', ' YB']
    Local $iIndex = 0
    While $iBytes > 1023
        $iIndex += 1
        $iBytes /= 1024
    WEnd
    Return Round($iBytes, $iRound) & $aArray[$iIndex]
EndFunc   ;==>_ByteSuffix
 

_InetGetProgress() Example and Function:

#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w 7

#include <InetConstants.au3>
#include <MsgBoxConstants.au3>
#include <StringConstants.au3>

Example()

Func Example()
    Local $sFilePathURL = 'http://ipv4.download.thinkbroadband.com/5MB.zip'
    Local $sFilePath = _InetGetProgress($sFilePathURL, @TempDir)
    If @error Then
        MsgBox($MB_SYSTEMMODAL, 'Error', 'Check the URL or your Internet connection is working.')
    Else
        MsgBox($MB_SYSTEMMODAL, 'Success', 'Successfully downloaded "' & $sFilePath & '"')
    EndIf
EndFunc   ;==>Example

; #FUNCTION# ====================================================================================================================
; Name ..........: _InetGetProgress
; Description ...: Download a file showing a progress bar using ProgressOn.
; Syntax ........: _InetGetProgress($sURL[, $sDirectory = @ScriptDir])
; Parameters ....: $sURL                - A valid URL that contains the filename too.
;                  $sDirectory          - [optional] Directory of where to download. Default is @ScriptDir.
; Return values .: Success - Downloaded filepath.
;                  Failure - Blank string & sets @error to non-zero
; Author ........: guinness
; Example .......: Yes
; ===============================================================================================================================
Func _InetGetProgress($sURL, $sDirectory = @ScriptDir)
    Local Const $INETGET_ERROR_1 = 1
    Local $sFilePath = StringRegExpReplace($sURL, '^.*/', '')
    If StringStripWS($sFilePath, $STR_STRIPALL) == '' Then
        Return SetError($INETGET_ERROR_1, 0, $sFilePath)
    EndIf

    $sFilePath = StringRegExpReplace($sDirectory, '[\\/]+$', '') & '\' & $sFilePath
    Local $iFileSize = InetGetSize($sURL, $INET_FORCERELOAD)
    Local $hDownload = InetGet($sURL, $sFilePath, $INET_LOCALCACHE, $INET_DOWNLOADBACKGROUND)

    Local Const $iRound = 0
    Local $iBytesRead = 0, $iPercentage = 0, $iSpeed = 0, _
            $sProgressText = '', $sSpeed = 'Current speed: ' & _ByteSuffix($iBytesRead - $iSpeed) & '/s'
    Local $hTimer = TimerInit()

    ProgressOn('', '')

    While Not InetGetInfo($hDownload, $INET_DOWNLOADCOMPLETE)
        $iBytesRead = InetGetInfo($hDownload, $INET_DOWNLOADREAD)
        $iPercentage = $iBytesRead * 100 / $iFileSize
        $sProgressText = 'Downloading ' & _ByteSuffix($iBytesRead, $iRound) & ' of ' & _ByteSuffix($iFileSize, $iRound) & @CRLF & $sSpeed

        ProgressSet(Round($iPercentage, $iRound), $sProgressText, 'Downloading: ' & $sFilePath)

        If TimerDiff($hTimer) >= 1000 Then
            $sSpeed = 'Current speed: ' & _ByteSuffix($iBytesRead - $iSpeed) & '/s'
            $iSpeed = $iBytesRead
            $hTimer = TimerInit()
        EndIf
        Sleep(20)
    WEnd

    InetClose($hDownload)
    ProgressOff()
    Return $sFilePath
EndFunc   ;==>_InetGetProgress

Func _ByteSuffix($iBytes, $iRound = 2) ; By Spiff59
    Local Const $aArray[9] = [' bytes', ' KB', ' MB', ' GB', ' TB', ' PB', ' EB', ' ZB', ' YB']
    Local $iIndex = 0
    While $iBytes > 1023
        $iIndex += 1
        $iBytes /= 1024
    WEnd
    Return Round($iBytes, $iRound) & $aArray[$iIndex]
EndFunc   ;==>_ByteSuffix
Edited by guinness

_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 04/09/2015

Share this post


Link to post
Share on other sites



Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Similar Content

    • BrewManNH
      By BrewManNH
      I have created a UDF that will allow you to easily create a customizable GUI with either a standard progress bar or a marquee style progress bar. You can change the size and back ground color of the GUI, as well as the font, font size, and color of the text. The function doesn't require any parameters to operate, but the default text is very generic so you probably would want to set that at the very least.
    • leb
      By leb
      Hello there,
      I am using the function InetGet example in the help files on a website and getting the error 13. First, I searched the help files and the forum for a list of errors to consult to no avail. I suspect this is a 400's server reply based error but it would be nice to get more info about it.
      Please help, thanks.
      L
    • Dante_t
      By Dante_t
      Hi Guys, I need help. I have searched the forum before posting and i couldn't find anything. The code below works fine when downloading files from "http" sites, but when trying to download from "https" sites, no files are downloaded. I tried different sites and I experience the same problem everywhere. Is there something I'm missing or doing wrong? Please note that I'm not a programmer and I'm new to this. I'm just using logic wherever i can to get things done. your help will be highly appreciated.
       
      #include <InetConstants.au3>
      #include <MsgBoxConstants.au3>
      #include <WinAPIFiles.au3>
      ; Download a file in the background.
      ; Wait for the download to complete.

      Example()
      Func Example()
          ; Save the downloaded file to the temporary folder.
          Local $sFilePath = "d:\"
          ; Download the file in the background with the selected option of 'force a reload from the remote site.'
          Local $hDownload = InetGet("https://en.wikipedia.org/wiki/HTTPS#/media/File:Internet2.jpg", $sFilePath& "Internet2.jpg", $INET_FORCERELOAD, $INET_DOWNLOADBACKGROUND)
          ; Wait for the download to complete by monitoring when the 2nd index value of InetGetInfo returns True.
          Do
              Sleep(250)
          Until InetGetInfo($hDownload, $INET_DOWNLOADCOMPLETE)
          ; Retrieve the number of total bytes received and the filesize.
          Local $iBytesSize = InetGetInfo($hDownload, $INET_DOWNLOADREAD)
          Local $iFileSize = FileGetSize($sFilePath&"Internet2.jpg")
          ; Close the handle returned by InetGet.
          InetClose($hDownload)
          ; Display details about the total number of bytes read and the filesize.
          MsgBox($MB_SYSTEMMODAL, "", "The total download size: " & $iBytesSize & @CRLF & _
                  "The total filesize: " & $iFileSize)
          ; Delete the file.
          ;FileDelete($sFilePath)
      EndFunc   ;==>Example
       
    • swatsapkraz
      By swatsapkraz
      First script here. Thanks for taking the time.
      I want to download a file from my dropbox or other cloud file host and I want autoit to read the file and proceed.
      Here are the references I've gone through, it's just I'm not familiar yet with autoit so I'm looking for advice:
      https://www.autoitscript.com/autoit3/docs/functions/InetGet.htm
      https://www.autoitscript.com/autoit3/docs/functions/FileRead.htm
       
      How would I start out downloading a text file from dropbox and if in the file there is a 1 then it will proceed with the rest of the script if there is a 0 or if the file cannot be downloaded I want it to just end.
       
      Thank you for taking the time to read this and I apologize in advance if this seems very trivial for some but this is my first script and I'm hoping this is the correct place to ask this question.
    • jonson1986
      By jonson1986
      Hey
      I'm trying to use InetGet function to download multiple images from a website, some pages having three images, some pages having 4 images some of them having more...
      I wrote belong codes to work with autoit and having issues when autoit find not matching url available then autoit just script stopped without any error and I just want to same all the avaialble images on the website if links are not more left then script should moves on but script just stopped...
      Here is complete scenerio
      I've so many webpages with random number of images are hosting on those pages, in below code, InetGet able to download first three files easily and when it reaches to 4th link that is missing on the webpage that's why script stopped just but I want autoit to download only those images those are links are available and rest of files needs to be skipped automatically for this page if on the next page 4th link of image avaiable then autoit script needs to download 4th one also.
      Furthermore, please help me to download files with it's original names instead of whatever name I want to same them like in InetGet I've to give some name to the file that I'm willind to download instead of original name that is available online.
      Please Help me.
      Here i my code;
      $File6 = @ScriptDir & "\images_source.txt" $txt6 = FileRead($File6) $target_source7 = _StringBetween($txt6, 'src="', '"') if Not @error Then InetGet ( $target_source7[0], @ScriptDir & '\Description\Image1.jpg'); 1st image download coz link is available InetGet ( $target_source7[1], @ScriptDir & '\Description\Image2.jpg'); 2nd image download coz link is available InetGet ( $target_source7[2], @ScriptDir & '\Description\Image3.jpg'); 3rd image download coz link is available InetGet ( $target_source7[3], @ScriptDir & '\Description\Image4.jpg'); 4th image not able to download coz link is not available and script just stopped EndIf