home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 February / PCWorld_2006-02_cd.bin / software / vyzkuste / triky / triky.exe / autoit-v3-setup.exe / Extras / AutoUpdateIt.au3 < prev    next >
Windows Autorun File  |  2005-06-03  |  26KB  |  712 lines

  1. ; =======================================================================
  2. ; AutoUpdateIt
  3. ; Original by Rob Saunders
  4. ; Modifications by JPM
  5. ;
  6. ; Command Line Options:
  7. ;  - AutoUpdateIt.au3 [/release | /beta | /alpha] [/silent]
  8. ;    - /release   Download latest release
  9. ;    - /beta      Download latest beta
  10. ;    - /alpha     Download latest alpha
  11. ;    - /silent    Silently auto-install (resets all settings)
  12. ;
  13. ; History:
  14. ;  - 1.35 - Fixed some display bugs
  15. ;  - 1.34 - Display Alpha release if available
  16. ;         - Command line parameters added /alpha to check for latest alpha
  17. ;  - 1.33 - Added Retry/Cancel msgbox when cannot connect to receive update file
  18. ;         - Added Progress bar for non-WinXP users
  19. ;  - 1.32 - Changed _CompareVersions again (integer comparison now)
  20. ;  - 1.31 - Rewrote _ClipPath again
  21. ;  - 1.30 - Rewrote a few UDFs (_CompareVersions, _ClipPath)
  22. ;         - Underscored all UDF names
  23. ;         - Removed a misplaced 'Then' screwing up command line options
  24. ;  - 1.21 - Stupid bug fixed (ignored version check for /beta command)
  25. ;         - CompareVersions function works properly now (was seeing 3.0.103.173 as newer than 3.1.0.1)
  26. ;  - 1.20 - Command line parameters added
  27. ;           - /release to check for latest public release
  28. ;           - /beta to check for latest beta
  29. ;           - /silent to install silently (you will lose your compiler and file settings)
  30. ;  - 1.11 - Starts the download when you press one of the download
  31. ;           buttons, resulting in pre-downloading while you choose
  32. ;           where to save the file
  33. ;         - Default name for Beta download includes full version string
  34. ;         - Deletes "au3_update.dat" from temp files after loading data
  35. ;  - 1.10 - Displays release date
  36. ;         - Changed layout of buttons / groups
  37. ;         - Slightly modified error message when server inaccessible
  38. ;  - 1.00 - "Release" / given a version number
  39. ;
  40. ; Forum Threads:
  41. ;  - http://www.autoitscript.com/forum/index.php?showtopic=7547&view=getnewpost
  42. ;  - http://www.autoitscript.com/forum/index.php?showtopic=12099&view=getnewpost
  43. ;
  44. ; =======================================================================
  45.  
  46. #NoTrayIcon
  47. #Include <GUIConstants.au3>
  48.  
  49. ; ========================================
  50. ; Predefine variables
  51. ; ========================================
  52. Global Const $s_Title = 'AutoUpdateIt'
  53. Global Const $s_Version = '1.35'
  54. Global Const $s_DatFile = 'http://www.autoitscript.com/autoit3/files/beta/update.dat'
  55. Global Const $s_DatFile_Local = @TempDir & '\au3_update.dat'
  56. Global Const $s_Au3UpReg = 'HKCU\Software\AutoIt v3\AutoUpdateIt'
  57.  
  58. Global $i_DownSize, $s_DownPath, $s_DownTemp, $s_DownFolder
  59. Global $i_DatFileLoaded, $i_ValidAu3Path, $i_DnInitiated
  60. Global $s_AutoUpdate, $i_SilentInstall
  61.  
  62. Dim $s_ReleaseVer, $s_ReleaseFile, $i_ReleaseSize, $i_ReleaseDate, $s_ReleasePage
  63. Dim $s_BetaVer, $s_BetaFile, $i_BetaSize, $i_BetaDate, $s_BetaPage
  64. Dim $s_AlphaVer, $s_AlphaFile, $i_AlphaSize, $i_AlphaDate, $s_AlphaPage
  65.  
  66. ; ========================================
  67. ; Read registry settings
  68. ; ========================================
  69. Global $s_DefDownDir = RegRead($s_Au3UpReg, 'DownloadDir')
  70. If @error Then
  71.     $s_DefDownDir = @DesktopDir
  72. EndIf
  73.  
  74. Global $s_Au3Path = RegRead('HKLM\Software\AutoIt v3\AutoIt', 'InstallDir')
  75. If Not @error And FileExists($s_Au3Path & '\AutoIt3.exe') Then
  76.     $s_CurrVer = FileGetVersion($s_Au3Path & "\AutoIt3.exe")
  77.     $s_CurrDate = _FriendlyDate(FileGetTime($s_Au3Path & "\AutoIt3.exe", 0, 1))
  78. Else
  79.     $s_Au3Path = 'Installation not found'
  80.     $s_CurrVer = 'Unavailable'
  81. EndIf
  82.  
  83. ; ========================================
  84. ; Check for command line parameters
  85. ; ========================================
  86. If _StringInArray($CmdLine, '/release') Or _StringInArray($CmdLine, '/beta') Or _StringInArray($CmdLine, '/alpha') Then
  87.     Opt('TrayIconHide', 0)
  88.     _Status('Checking for updates')
  89.     InetGet($s_DatFile, $s_DatFile_Local, 1)
  90.     If @InetGetBytesRead = -1 Then
  91.         _Status('Could not connect to site', 'Please check your connection and try again')
  92.         Sleep(4000)
  93.         Exit
  94.     EndIf
  95.     _LoadUpdateData()
  96.     
  97.     If _StringInArray($CmdLine, '/release') And _CompareVersions($s_ReleaseVer, $s_CurrVer) Then
  98.         $s_AutoUpdate = $s_ReleaseFile
  99.         $s_DownTemp = @TempDir & '\autoit-v3-setup.exe'
  100.         $i_DownSize = $i_ReleaseSize
  101.     ElseIf _StringInArray($CmdLine, '/beta') And _CompareVersions($s_BetaVer, $s_CurrVer) Then
  102.         $s_AutoUpdate = $s_BetaFile
  103.         $s_DownTemp = @TempDir & '\autoit-v' & $s_BetaVer & '.exe'
  104.         $i_DownSize = $i_BetaSize
  105.     ElseIf _StringInArray($CmdLine, '/alpha') And _CompareVersions($s_AlphaVer, $s_CurrVer) Then
  106.         $s_AutoUpdate = $s_AlphaFile
  107.         $s_DownTemp = @TempDir & '\autoit-v' & $s_AlphaVer & '.exe'
  108.         $i_DownSize = $i_AlphaSize
  109.     EndIf
  110.  
  111.     If $s_AutoUpdate Then
  112.         InetGet($s_AutoUpdate, $s_DownTemp, 1, 1)
  113.         $s_DownSize = Round($i_ReleaseSize / 1024) & ' KB'
  114.         While @InetGetActive
  115.             _Status('Downloading update', '', @InetGetBytesRead, $i_DownSize)
  116.         WEnd
  117.         _Status('Download Complete', 'Launching install')
  118.         Sleep(1000)
  119.         If _StringInArray($CmdLine, '/silent') Then
  120.             _Start('"' & $s_DownTemp & '" /S')
  121.         Else
  122.             _Start('"' & $s_DownTemp & '"')
  123.         EndIf
  124.     Else
  125.         _Status('No new versions available')
  126.         Sleep(1000)
  127.     EndIf
  128.     Exit
  129. EndIf
  130.  
  131. ; ========================================
  132. ; GUI - Main Application
  133. ; ========================================
  134. Opt("GuiResizeMode", $GUI_DOCKALL)
  135. $gui_Main = GuiCreate($s_Title, 350, 310+20)
  136.  
  137. $me_Mn_Help = GuiCtrlCreateMenu('&Help')
  138. $me_Mn_VisitSite = GuiCtrlCreateMenuItem('&Visit the AutoIt3 Website', $me_Mn_Help)
  139. $me_Mn_About = GuiCtrlCreateMenuItem('&About', $me_Mn_Help)
  140.  
  141. GuiCtrlCreateLabel('', 0, 0, 350, 2, $SS_SUNKEN)
  142.  
  143. $gr_Instal_Details=GuiCtrlCreateGroup('Current Installation Details', 5, 5, 340, 75)
  144. GuiCtrlCreateLabel('Version: ' & $s_CurrVer, 15, 25, 300, 15)
  145. GuiCtrlCreateLabel('Date: ' & $s_CurrDate, 15, 40, 300, 15)
  146. GuiCtrlCreateLabel('Install Path: ' & $s_Au3Path, 15, 55, 300, 15)
  147.  
  148. $gr_Mn_Release = GuiCtrlCreateGroup('Latest Public Release', 5, 85, 165, 60)
  149. $lb_Mn_ReleaseVer = GuiCtrlCreateLabel('Version: Loading...', 15, 105, 145, 15)
  150. $lb_Mn_ReleaseDate = GuiCtrlCreateLabel('Date: Loading...', 15, 120, 145, 15)
  151.  
  152. $gr_Mn_Beta = GuiCtrlCreateGroup('Latest Beta', 180, 85, 165, 60)
  153. $lb_Mn_BetaVer = GuiCtrlCreateLabel('Version: Loading...', 190, 105, 145, 15)
  154. $lb_Mn_BetaDate = GuiCtrlCreateLabel('Date: Loading...', 190, 120, 145, 15)
  155.  
  156. $gr_Mn_Alpha = GuiCtrlCreateGroup('Latest Alpha', 180+175, 85, 165, 60)
  157. $lb_Mn_AlphaVer = GuiCtrlCreateLabel('Version: Loading...', 190+175, 105, 145, 15)
  158. $lb_Mn_AlphaDate = GuiCtrlCreateLabel('Date: Loading...', 190+175, 120, 145, 15)
  159.  
  160. GUIStartGroup() 
  161. $ra_Mn_DoneNotify = GuiCtrlCreateRadio('&Notify when download complete', 5, 155, 340, 15)
  162. $ra_Mn_DoneRun = GuiCtrlCreateRadio('&Autorun install when download complete', 5, 175, 340, 15)
  163.  
  164. ; Check default done option
  165. If RegRead($s_Au3UpReg, 'DoneOption') = 'Run' Then
  166.     GuiCtrlSetState($ra_Mn_DoneRun, $GUI_CHECKED)
  167. Else
  168.     GuiCtrlSetState($ra_Mn_DoneNotify, $GUI_CHECKED)
  169. EndIf
  170.  
  171.     $bt_Mn_Close = GuiCtrlCreateButton('&Close', 10, 275, 330, 25)
  172.  
  173. ; ========================================
  174. ; Control Set - Download Buttons
  175. ; ========================================
  176.     
  177. $bt_Mn_ReleaseDl = GuiCtrlCreateButton('Download Public &Release', 5, 195, 165, 30)
  178. GuiCtrlSetState(-1, $GUI_DISABLE)
  179. $lb_Mn_ReleaseSize = GuiCtrlCreateLabel('Size: Loading...', 5, 230, 165, 15, $SS_CENTER)
  180. $lb_Mn_ReleasePage = GuiCtrlCreateLabel('Visit Download Page', 5, 245, 165, 15, $SS_CENTER)
  181. GuiCtrlSetState(-1, $GUI_DISABLE)
  182. GuiCtrlSetFont(-1, 9, 400, 4)
  183. GuiCtrlSetColor(-1, 0x0000ff)
  184. GuiCtrlSetCursor(-1, 0)
  185.  
  186. $bt_Mn_BetaDl = GuiCtrlCreateButton('Download &Beta', 180, 195, 165, 30)
  187. GuiCtrlSetState(-1, $GUI_DISABLE)
  188. $lb_Mn_BetaSize = GuiCtrlCreateLabel('Size: Loading...', 180, 230, 165, 15, $SS_CENTER)
  189. $lb_Mn_BetaPage = GuiCtrlCreateLabel('Visit Download Page', 180, 245, 165, 15, $SS_CENTER)
  190. GuiCtrlSetState(-1, $GUI_DISABLE)
  191. GuiCtrlSetFont(-1, 9, 400, 4)
  192. GuiCtrlSetColor(-1, 0x0000ff)
  193. GuiCtrlSetCursor(-1, 0)
  194.  
  195. $bt_Mn_AlphaDl = GuiCtrlCreateButton('Download &Alpha', 180+175, 195, 165, 30)
  196. GuiCtrlSetState(-1, $GUI_DISABLE)
  197. $lb_Mn_AlphaSize = GuiCtrlCreateLabel('Size: Loading...', 180+175, 230, 165, 15, $SS_CENTER)
  198. $lb_Mn_AlphaPage = GuiCtrlCreateLabel('Visit Download Page', 180+175, 245, 165, 15, $SS_CENTER)
  199. GuiCtrlSetState(-1, $GUI_DISABLE)
  200. GuiCtrlSetFont(-1, 9, 400, 4)
  201. GuiCtrlSetColor(-1, 0x0000ff)
  202. GuiCtrlSetCursor(-1, 0)
  203.  
  204. $a_DownButtons = StringSplit($bt_Mn_ReleaseDl & '.' &_
  205.                              $lb_Mn_ReleaseSize & '.' &_
  206.                              $lb_Mn_ReleasePage & '.' &_
  207.                              $bt_Mn_BetaDl & '.' &_
  208.                              $lb_Mn_BetaSize & '.' &_
  209.                              $lb_Mn_BetaPage & '.' &_
  210.                              $bt_Mn_AlphaDl & '.' &_
  211.                              $lb_Mn_AlphaSize & '.' &_
  212.                              $lb_Mn_AlphaPage, '.')
  213.  
  214. ; ========================================
  215. ; Control Set - Download Display
  216. ; ========================================
  217. $lb_Mn_DwnToTtl = GuiCtrlCreateLabel('Downloading to:', 5, 195, 290, 15, $SS_LEFTNOWORDWRAP)
  218. $lb_Mn_DwnToTxt = GuiCtrlCreateLabel('', 5, 210, 290, 15, $SS_LEFTNOWORDWRAP)
  219.  
  220. $pg_Mn_Progress = GuiCtrlCreateProgress(5, 225, 340, 20)
  221. $lb_Mn_Progress = GuiCtrlCreateLabel('', 5, 250, 290, 15)
  222.  
  223. $bt_Mn_OpenFile = GuiCtrlCreateButton('&Open', 105, 275, 75, 25)
  224. GuiCtrlSetState(-1, $GUI_DISABLE)
  225. $bt_Mn_OpenFolder = GuiCtrlCreateButton('Open &Folder', 185, 275, 75, 25)
  226. GuiCtrlSetState(-1, $GUI_DISABLE)
  227.  
  228. $a_DownDisplay = StringSplit($lb_Mn_DwnToTtl & '.' &_
  229.                              $lb_Mn_DwnToTxt & '.' &_
  230.                              $pg_Mn_Progress & '.' &_
  231.                              $lb_Mn_Progress & '.' &_
  232.                              $bt_Mn_OpenFile & '.' &_
  233.                              $bt_Mn_OpenFolder, '.')
  234.  
  235. _GuiCtrlGroupSetState($a_DownDisplay, $GUI_HIDE)
  236.  
  237. ; ========================================
  238. ; GUI - About
  239. ; ========================================
  240. $gui_About = GuiCreate('About', 300, 120, -1, -1, BitOr($WS_CAPTION, $WS_SYSMENU), -1, $gui_Main)
  241. GuiCtrlCreateLabel($s_Title & ' v' & $s_Version & ' - The AutoIt3 Update Utility' & @LF &_
  242.                    @LF &_
  243.                    'This application is a utility for easily receiving the most ' &_
  244.                    'recent public release or beta version of AutoIt3 available. ' &_
  245.                    'It was written in AutoIt3 script by Rob Saunders.', 5, 5, 290, 75)
  246.  
  247. $lb_Ab_VisitSite = GuiCtrlCreateLabel('Visit the AutoIt Website', 5, 80, 145, 15)
  248. GuiCtrlSetFont(-1, 9, 400, 4)
  249. GuiCtrlSetColor(-1, 0x0000ff)
  250. GuiCtrlSetCursor(-1, 0)
  251. GuiCtrlSetTip(-1, 'http://www.autoitscript.com')
  252.  
  253. $lb_Ab_ContactAuthor = GuiCtrlCreateLabel('Contact Rob Saunders', 5, 100, 145, 15)
  254. GuiCtrlSetFont(-1, 9, 400, 4)
  255. GuiCtrlSetColor(-1, 0x0000ff)
  256. GuiCtrlSetCursor(-1, 0)
  257. GuiCtrlSetTip(-1, 'rksaunders@gmail.com')
  258.  
  259. $bt_Ab_Close = GuiCtrlCreateButton('&Close', 220, 90, 75, 25)
  260.  
  261. ; ========================================
  262. ; Application start
  263. ; ========================================
  264.  
  265. ; Show Main Window
  266. GuiSetState(@SW_SHOW, $gui_Main)
  267.  
  268. ; Download update data file
  269. InetGet($s_DatFile, $s_DatFile_Local, 1, 1)
  270.  
  271. ; Harness GUI Events
  272. While 1
  273.     $a_GMsg = GUIGetMsg(1)
  274.  
  275.     If Not @InetGetActive And Not $i_DatFileLoaded Then
  276.         If @InetGetBytesRead = -1 Then
  277.             $i_Res = MsgBox(5+16+8192, 'Error', 'Error connecting to server.' & @LF &_
  278.                                                 'Please verify the following:' & @LF &_
  279.                                                 ' - You can connect to the internet' & @LF &_
  280.                                                 ' - You can access the site http://www.AutoItScript.com' & @LF &_
  281.                                                 ' - Your firewall is not blocking internet access to this program')
  282.             If $i_Res = 4 Then
  283.                 InetGet($s_DatFile, $s_DatFile_Local, 1, 1)
  284.             Else
  285.                 Exit
  286.             EndIf
  287.         Else
  288.             _LoadUpdateData()
  289.             If $s_AlphaVer <> '' Then
  290.                  if _CompareVersions(StringTrimRight($s_AlphaVer,1), $s_BetaVer)>0 Then
  291.                     $pos=WinGetPos($s_Title)
  292.                     WinMove($s_Title,"",$pos[0],$pos[1],$pos[2]+175,$pos[3])
  293.                     GUICtrlSetPos($gr_Instal_Details, 5, 5, 340+175, 75)
  294.     
  295.                     GUICtrlSetPos($bt_Mn_Close, 10, 275, 330+175, 25)
  296.                     GUICtrlSetPos($lb_Mn_DwnToTtl, 5, 195, 290+175, 15)
  297.                     GUICtrlSetPos($lb_Mn_DwnToTxt, 5, 210, 290+175, 15)
  298.                     GUICtrlSetPos($pg_Mn_Progress, 5, 225, 340+175, 20)
  299.                     GUICtrlSetPos($lb_Mn_Progress, 5, 250, 290+175, 15)
  300.                     GUICtrlSetPos($bt_Mn_OpenFile, 105+175, 275, 75, 25)
  301.                     GUICtrlSetPos($bt_Mn_OpenFolder, 185+175, 275, 75, 25)
  302.                 Else
  303.                     $s_AlphaVer=''
  304.                 EndIf
  305.             EndIf
  306.  
  307.             $i_ReleaseSizeKB = Round($i_ReleaseSize / 1024)
  308.             $i_BetaSizeKB = Round($i_BetaSize / 1024)
  309.             $i_AlphaSizeKB = Round($i_AlphaSize / 1024)
  310.  
  311.             If _CompareVersions($s_ReleaseVer, $s_CurrVer) Then
  312.                 GuiCtrlSetData($gr_Mn_Release, 'Latest Public Release *New*')
  313.                 GuiCtrlSetColor($gr_Mn_Release, 0x0000ff)
  314.             EndIf
  315.             GuiCtrlSetData($lb_Mn_ReleaseVer, 'Version: ' & $s_ReleaseVer)
  316.             
  317.             If _CompareVersions($s_BetaVer, $s_CurrVer) Then
  318.                 GuiCtrlSetData($gr_Mn_Beta, 'Latest Beta *New*')
  319.                 GuiCtrlSetColor($gr_Mn_Beta, 0x0000ff)
  320.             EndIf
  321.             GuiCtrlSetData($lb_Mn_BetaVer, 'Version: ' & $s_BetaVer)
  322.             
  323.             If _CompareVersions($s_AlphaVer, $s_CurrVer) Then
  324.                 GuiCtrlSetData($gr_Mn_Alpha, 'Latest Alpha *New*')
  325.                 GuiCtrlSetColor($gr_Mn_Alpha, 0x0000ff)
  326.             EndIf
  327.             GuiCtrlSetData($lb_Mn_AlphaVer, 'Version: ' & $s_AlphaVer)
  328.  
  329.             GuiCtrlSetData($lb_Mn_ReleaseDate, 'Date: ' & _FriendlyDate($i_ReleaseDate))
  330.             GuiCtrlSetData($lb_Mn_BetaDate, 'Date: ' & _FriendlyDate($i_BetaDate))
  331.             GuiCtrlSetData($lb_Mn_AlphaDate, 'Date: ' & _FriendlyDate($i_AlphaDate))
  332.  
  333.             GuiCtrlSetData($lb_Mn_ReleaseSize, 'Size: ' & $i_ReleaseSizeKB & ' KB')
  334.             GuiCtrlSetData($lb_Mn_BetaSize, 'Size: ' & $i_BetaSizeKB & ' KB')
  335.             GuiCtrlSetData($lb_Mn_AlphaSize, 'Size: ' & $i_AlphaSizeKB & ' KB')
  336.  
  337.             GuiCtrlSetTip($lb_Mn_ReleasePage, $s_ReleasePage)
  338.             GuiCtrlSetTip($lb_Mn_BetaPage, $s_BetaPage)
  339.             GuiCtrlSetTip($lb_Mn_AlphaPage, $s_AlphaPage)
  340.             
  341.             GuiCtrlSetState($bt_Mn_ReleaseDl, $GUI_ENABLE)
  342.             GuiCtrlSetState($bt_Mn_BetaDl, $GUI_ENABLE)
  343.             GuiCtrlSetState($bt_Mn_AlphaDl, $GUI_ENABLE)
  344.             GuiCtrlSetState($lb_Mn_ReleasePage, $GUI_ENABLE)
  345.             GuiCtrlSetState($lb_Mn_BetaPage, $GUI_ENABLE)
  346.             GuiCtrlSetState($lb_Mn_AlphaPage, $GUI_ENABLE)
  347.  
  348.             $i_DatFileLoaded = 1
  349.         EndIf
  350.     EndIf
  351.  
  352.     If $i_DnInitiated Then
  353.         If @InetGetActive Then
  354.             $i_DnPercent = Int(@InetGetBytesRead / $i_DownSize * 100)
  355.  
  356.             $s_DnBytes = Round(@InetGetBytesRead / 1024) & ' KB'
  357.             $s_DnSize = Round($i_DownSize / 1024) & ' KB'
  358.                 
  359.             GuiCtrlSetData($pg_Mn_Progress, $i_DnPercent)
  360.             GuiCtrlSetData($lb_Mn_Progress, 'Download Progress: ' & $i_DnPercent & '% (' & $s_DnBytes & ' of ' & $s_DnSize & ')')
  361.         Else
  362.             GuiCtrlSetData($pg_Mn_Progress, 100)
  363.             If Not FileMove($s_DownTemp, $s_DownPath, 1) Then
  364.                 MsgBox(16+8192, 'Error', 'Error moving file.')
  365.                 GuiCtrlSetData($lb_Mn_Progress, 'Error')
  366.             Else
  367.                 If GuiCtrlRead($ra_Mn_DoneRun) = $GUI_CHECKED Then
  368.                     _Start('"' & $s_DownPath & '"')
  369.                     Exit
  370.                 Else
  371.                     GuiCtrlSetData($lb_Mn_Progress, 'Download Complete!')
  372.  
  373.                     GuiCtrlSetData($bt_Mn_Close, '&Close')
  374.                     GuiCtrlSetState($bt_Mn_OpenFile, $GUI_ENABLE)
  375.                     GuiCtrlSetState($bt_Mn_OpenFolder, $GUI_ENABLE)
  376.                     $i_Response = MsgBox(4+64+256+8192, $s_Title, 'Download complete!' & @LF &_
  377.                                                                   'Would you like to run the installer now?')
  378.                     If $i_Response = 6 Then
  379.                         _Start('"' & $s_DownPath & '"')
  380.                         Exit
  381.                     EndIf
  382.                 EndIf
  383.             EndIf
  384.             
  385.             $i_DnInitiated = 0
  386.         EndIf
  387.     EndIf
  388.  
  389.     If $a_GMsg[1] = $gui_Main Then
  390.         Select
  391.             ; Radio buttons
  392.             Case $a_GMsg[0] = $ra_Mn_DoneRun
  393.                 RegWrite($s_Au3UpReg, 'DoneOption', 'REG_SZ', 'Run')
  394.  
  395.             Case $a_GMsg[0] = $ra_Mn_DoneNotify
  396.                 RegWrite($s_Au3UpReg, 'DoneOption', 'REG_SZ', 'Notify')
  397.             
  398.             ; Download buttons
  399.             Case $a_GMsg[0] = $bt_Mn_ReleaseDl
  400.                 $tmp = StringInStr($s_ReleaseFile, '/', 0, -1)
  401.                 $s_DefFileName = StringTrimLeft($s_ReleaseFile, $tmp)
  402.                 $i_DownSize = $i_ReleaseSize
  403.                 _DownloadFile($s_ReleaseFile, 'autoit-v3-setup.exe')
  404.  
  405.             Case $a_GMsg[0] = $bt_Mn_BetaDl
  406.                 $tmp = StringInStr($s_BetaFile, '/', 0, -1)
  407.                 $s_DefFileName = StringTrimLeft($s_BetaFile, $tmp)
  408.                 $i_DownSize = $i_BetaSize
  409.                 _DownloadFile($s_BetaFile, 'autoit-v' & $s_BetaVer & '.exe')
  410.  
  411.             Case $a_GMsg[0] = $bt_Mn_AlphaDl
  412.                 $tmp = StringInStr($s_AlphaFile, '/', 0, -1)
  413.                 $s_DefFileName = StringTrimLeft($s_AlphaFile, $tmp)
  414.                 $i_DownSize = $i_AlphaSize
  415.                 _DownloadFile($s_AlphaFile, 'autoit-v' & $s_AlphaVer & '.exe')
  416.  
  417.             ; Download page "hyperlinks"
  418.             Case $a_GMsg[0] = $lb_Mn_ReleasePage
  419.                 _Start($s_ReleasePage)
  420.             
  421.             Case $a_GMsg[0] = $lb_Mn_BetaPage
  422.                 _Start($s_BetaPage)
  423.                 
  424.             Case $a_GMsg[0] = $lb_Mn_AlphaPage
  425.                 _Start($s_AlphaPage)
  426.  
  427.             ; Open buttons
  428.             Case $a_GMsg[0] = $bt_Mn_OpenFile
  429.                 _Start('"' & $s_DownPath & '"')
  430.                 Exit
  431.  
  432.             Case $a_GMsg[0] = $bt_Mn_OpenFolder
  433.                 _Start('"' & EnvGet('windir') & '\explorer.exe" /select,"' & $s_DownPath & '"')
  434.                 Exit
  435.  
  436.             ; Menu items
  437.             Case $a_GMsg[0] = $me_Mn_VisitSite
  438.                 _Start('http://www.autoitscript.com')
  439.  
  440.             Case $a_GMsg[0] = $me_Mn_About
  441.                 GuiSetState(@SW_SHOW, $gui_About)
  442.  
  443.             ; Close buttons
  444.             Case $a_GMsg[0] = $bt_Mn_Close
  445.                 _CancelDownload()
  446.                 
  447.             Case $a_GMsg[0] = $GUI_EVENT_CLOSE
  448.                 _CancelDownload(1)
  449.         EndSelect
  450.     ElseIf $a_GMsg[1] = $gui_About Then
  451.         Select
  452.             Case $a_GMsg[0] = $lb_Ab_VisitSite
  453.                 _Start('http://www.autoitscript.com')
  454.  
  455.             Case $a_GMsg[0] = $lb_Ab_ContactAuthor
  456.                 _Start('"mailto:rksaunders@gmail.com?Subject=AutoIt3 Update Utility"')
  457.                 
  458.             Case $a_GMsg[0] = $GUI_EVENT_CLOSE Or $a_GMsg[0] = $bt_Ab_Close
  459.                 GuiSetState(@SW_HIDE, $gui_About)
  460.         EndSelect
  461.     EndIf
  462. Wend
  463.  
  464. ; ========================================
  465. ; Function Declarations
  466. ; ========================================
  467.  
  468. ; App. specific functions
  469.  
  470. Func _DownloadFile($s_DownUrl, $s_DownName)
  471.     $s_DownTemp = @TempDir & '\' & $s_DownName
  472.     InetGet($s_DownUrl, $s_DownTemp, 1, 1)
  473.  
  474.     $s_DownPath = FileSaveDialog('Save As', $s_DefDownDir, 'Executables (*.exe)', 16, $s_DownName)
  475.     If Not @error Then
  476.         If Not (StringRight($s_DownPath, 4) = '.exe') Then
  477.             $s_DownPath = $s_DownPath & '.exe'
  478.         EndIf
  479.  
  480.         $tmp = StringInStr($s_DownPath, '\', 0, -1)
  481.         $s_DownFolder = StringLeft($s_DownPath, $tmp)
  482.         RegWrite($s_Au3UpReg, 'DownloadDir', 'REG_SZ', $s_DownFolder)
  483.         
  484.         GuiCtrlSetData($lb_Mn_DwnToTxt, _ClipPath($s_DownPath, 55))
  485.         GuiCtrlSetData($lb_Mn_Progress, 'Download Progress: Calculating...')
  486.         
  487.         _GuiCtrlGroupSetState($a_DownButtons, $GUI_HIDE)
  488.         _GuiCtrlGroupSetState($a_DownButtons, $GUI_DISABLE)
  489.         _GuiCtrlGroupSetState($a_DownDisplay, $GUI_SHOW)
  490.         If $s_AlphaVer <> '' Then
  491.             GuiCtrlSetPos($bt_Mn_Close, 265+175, 275, 75, 25)
  492.         Else
  493.             GuiCtrlSetPos($bt_Mn_Close, 265, 275, 75, 25)
  494.         Endif
  495.             
  496.         GuiCtrlSetData($bt_Mn_Close, 'Cancel')
  497.         
  498.         $i_DnInitiated = 1
  499.     Else
  500.         InetGet('abort')
  501.         FileDelete($s_DownTemp)
  502.     EndIf
  503. EndFunc
  504.  
  505. Func _CancelDownload($i_Flag = 0)
  506.     If $i_DnInitiated Then
  507.         $i_Response = MsgBox(4+64+256+8192, $s_Title, 'Resuming is not possible.' & @LF &_
  508.                                                       'Your download will be lost.' & @LF &_
  509.                                                       'Continue?')
  510.         If $i_Response = 6 Then
  511.             $i_DnInitiated = 0
  512.             InetGet('abort')
  513.             FileDelete($s_DownTemp)
  514.             If $i_Flag = 1 Then
  515.                 Exit
  516.             EndIf
  517.             
  518.             _GuiCtrlGroupSetState($a_DownDisplay, $GUI_HIDE)
  519.  
  520.             GuiCtrlSetData($bt_Mn_Close, '&Close')
  521.             If $s_AlphaVer <> '' Then
  522.                 GuiCtrlSetPos($bt_Mn_Close, 10, 275, 330+175, 25)
  523.             Else
  524.                 GuiCtrlSetPos($bt_Mn_Close, 10, 275, 330, 25)
  525.             Endif
  526.             GuiCtrlSetData($pg_Mn_Progress, 0)
  527.  
  528.             _GuiCtrlGroupSetState($a_DownButtons, $GUI_SHOW)
  529.             _GuiCtrlGroupSetState($a_DownButtons, $GUI_ENABLE)
  530.         EndIf
  531.     Else
  532.         Exit
  533.     EndIf
  534. EndFunc
  535.  
  536. Func _LoadUpdateData()
  537.     Global $s_ReleaseVer, $s_ReleaseFile, $s_ReleasePage, $i_ReleaseSize, $i_ReleaseDate
  538.     Global $s_BetaVer, $s_BetaFile, $s_BetaPage, $i_BetaSize, $i_BetaDate
  539.     Global $s_AlphaVer, $s_AlphaFile, $s_AlphaPage, $i_AlphaSize, $i_AlphaDate
  540.  
  541.     $s_ReleaseVer = IniRead($s_DatFile_Local, 'AutoIt', 'version', 'Error reading file')
  542.     $s_ReleaseFile = IniRead($s_DatFile_Local, 'AutoIt', 'setup', '')
  543.     $s_ReleasePage = IniRead($s_DatFile_Local, 'AutoIt', 'index', 'http://www.autoitscript.com')
  544.     $i_ReleaseSize = IniRead($s_DatFile_Local, 'AutoIt', 'filesize', 0)
  545.     $i_ReleaseDate = IniRead($s_DatFile_Local, 'AutoIt', 'filetime', 0)
  546.  
  547.     $s_BetaVer = IniRead($s_DatFile_Local, 'AutoItBeta', 'version', 'Error reading file')
  548.     $s_BetaFile = IniRead($s_DatFile_Local, 'AutoItBeta', 'setup', '')
  549.     $s_BetaPage = IniRead($s_DatFile_Local, 'AutoItBeta', 'index', 'http://www.autoitscript.com')
  550.     $i_BetaSize = IniRead($s_DatFile_Local, 'AutoItBeta', 'filesize', 0)
  551.     $i_BetaDate = IniRead($s_DatFile_Local, 'AutoItBeta', 'filetime', 0)
  552.     
  553.     $s_AlphaVer = IniRead($s_DatFile_Local, 'AutoItAlpha', 'version', '')
  554.     $s_AlphaFile = IniRead($s_DatFile_Local, 'AutoItAlpha', 'setup', '')
  555.     $s_AlphaPage = IniRead($s_DatFile_Local, 'AutoItAlpha', 'index', 'http://www.autoitscript.com')
  556.     $i_AlphaSize = IniRead($s_DatFile_Local, 'AutoItAlpha', 'filesize', 0)
  557.     $i_AlphaDate = IniRead($s_DatFile_Local, 'AutoItAlpha', 'filetime', 0)
  558.  
  559.     FileDelete($s_DatFile_Local)
  560. EndFunc
  561.  
  562. ; Utility functions
  563.  
  564. Func _Start($s_StartPath)
  565.     If @OSType = 'WIN32_NT' Then
  566.         $s_StartStr = @ComSpec & ' /c start "" '
  567.     Else
  568.         $s_StartStr = @ComSpec & ' /c start '
  569.     EndIf
  570.     Run($s_StartStr & $s_StartPath, '', @SW_HIDE)
  571. EndFunc
  572.  
  573. Func _GuiCtrlGroupSetState(ByRef $a_GroupArray, $i_State)
  574.     For $i = 1 to $a_GroupArray[0]
  575.         GuiCtrlSetState($a_GroupArray[$i], $i_State)
  576.     Next
  577. EndFunc
  578.  
  579. Func _ClipPath($s_Path, $i_ClipLen)
  580.     Local $i_Half, $s_Left, $s_Right
  581.  
  582.     If StringLen($s_Path) > $i_ClipLen Then
  583.         $i_Half = Int($i_ClipLen / 2)
  584.         $s_Left = StringLeft($s_Path, $i_Half)
  585.         $s_Right = StringRight($s_Path, $i_Half)
  586.         $s_Path = $s_Left & '...' & $s_Right
  587.     EndIf
  588.     
  589.     Return $s_Path
  590. EndFunc
  591.  
  592. Func _NumSuffix($i_Num)
  593.     Local $s_Num
  594.     If StringRight($i_Num, 1) = 1 Then
  595.         $s_Num = Int($i_Num) & 'st'
  596.     ElseIf StringRight($i_Num, 1) = 2 Then
  597.         $s_Num = Int($i_Num) & 'nd'
  598.     ElseIf StringRight($i_Num, 1) = 3 Then
  599.         $s_Num = Int($i_Num) & 'rd'
  600.     Else
  601.         $s_Num = Int($i_Num) & 'th'
  602.     EndIf
  603.     
  604.     Return $s_Num
  605. EndFunc
  606.  
  607. Func _FriendlyDate($s_Date)
  608.     Local $a_Months = StringSplit('January,February,March,April,May,June,July,August,September,October,November,December', ',')
  609.     Local $s_Year, $s_Month, $s_Day
  610.     
  611.     $s_Year = StringLeft($s_Date, 4)
  612.     $s_Month = StringMid($s_Date, 5, 2)
  613.     $s_Month = $a_Months[Int(StringMid($s_Date, 5, 2))]
  614.     $s_Day = StringMid($s_Date, 7, 2)
  615.     $s_Day = _NumSuffix(StringMid($s_Date, 7, 2))
  616.  
  617.     Return $s_Month & ' ' & $s_Day & ', ' & $s_Year
  618. EndFunc
  619.  
  620. Func _StringInArray($a_Array, $s_String)
  621.     Local $i_ArrayLen = UBound($a_Array) - 1
  622.  
  623.     For $i = 0 To $i_ArrayLen
  624.         If $a_Array[$i] = $s_String Then
  625.             Return $i
  626.         EndIf
  627.     Next
  628.     SetError(1)
  629.     Return 0
  630. EndFunc
  631.  
  632. Func _CompareVersions($s_Vers1, $s_Vers2, $i_ReturnFlag = 0)
  633.     If $s_Vers1 = '' Then Return 0
  634.     Local $i, $i_Vers1, $i_Vers2, $i_Top
  635.     Local $a_Vers1 = StringSplit($s_Vers1, '.')
  636.     Local $a_Vers2 = StringSplit($s_Vers2, '.')
  637.  
  638.     $i_Top = $a_Vers1[0]
  639.     If $a_Vers1[0] < $a_Vers2[0] Then
  640.         $i_Top = $a_Vers2[0]
  641.     EndIf
  642.     
  643.     For $i = 1 To $i_Top
  644.         $i_Vers1 = 0
  645.         $i_Vers2 = 0
  646.         If $i <= $a_Vers1[0] Then
  647.             $i_Vers1 = Number($a_Vers1[$i])
  648.         EndIf
  649.         If $i <= $a_Vers2[0] Then
  650.             $i_Vers2 = Number($a_Vers2[$i])
  651.         EndIf
  652.         
  653.         If $i_Vers1 > $i_Vers2 Then
  654.             $v_Return = 1
  655.             ExitLoop
  656.         ElseIf $i_Vers1 < $i_Vers2 Then
  657.             $v_Return = 0
  658.             ExitLoop
  659.         Else
  660.             $v_Return = -1
  661.         EndIf
  662.     Next
  663.  
  664.     If $i_ReturnFlag Then
  665.         Select
  666.             Case $v_Return = -1
  667.                 SetError(1)
  668.                 Return 0
  669.             Case $v_Return = 1
  670.                 Return $s_Vers1
  671.             Case $v_Return = 0
  672.                 Return $s_Vers2
  673.         EndSelect
  674.     ElseIf $v_Return = -1 Then
  675.         SetError(1)
  676.         Return 0
  677.     Else
  678.         Return $v_Return
  679.     EndIf
  680. EndFunc
  681.  
  682. Func _Status($s_MainText, $s_SubText = '', $i_BytesRead = -1, $i_DownSize = -1)
  683.     Global $i_ProgOn
  684.     Global $i_StatusPercent
  685.     
  686.     If @OSVersion = "WIN_XP" Or @OSVersion = "WIN_2000" Or @OSVersion = "WIN_2003" Then
  687.         If $s_SubText <> '' Then 
  688.             $s_SubText = @LF & $s_SubText
  689.         EndIf
  690.         
  691.         If $i_BytesRead = -1 Then
  692.             TrayTip($s_Title, $s_MainText & $s_SubText, 10, 16)
  693.         Else
  694.             $s_DownStatus = Round($i_BytesRead / 1024) & ' of ' & Round($i_DownSize / 1024) & ' KB'
  695.             TrayTip($s_Title, $s_MainText & $s_SubText & @LF & $s_DownStatus, 10, 16)
  696.         EndIf
  697.     Else
  698.         If Not $i_ProgOn Then
  699.             ProgressOn($s_Title, $s_MainText, $s_SubText, -1, -1, 2+16)
  700.             $i_ProgOn = 1
  701.         Else
  702.             If $i_BytesRead = -1 Then
  703.                 ProgressSet($i_StatusPercent, $s_SubText, $s_MainText)
  704.             Else
  705.                 $s_DownStatus = 'Downloading ' & Round($i_BytesRead / 1024) & ' of ' & Round($i_DownSize / 1024) & ' KB'
  706.                 $i_StatusPercent = Round($i_BytesRead / $i_DownSize * 100)
  707.                 ProgressSet($i_StatusPercent, $s_DownStatus, $s_MainText)
  708.             EndIf
  709.         EndIf
  710.     EndIf
  711. EndFunc
  712.