#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <File.au3>
Opt('MustDeclareVars', 1)
Opt('TrayMenuMode', 1)
Global $hGui, $nInputDirInstall, $nInputDirShortcut, $nButtonSelectInstall, $nButtonSelectShortcut, _
$sPathShortcut, $nButtonInstall, $nInputDirShortcut, $nListView, $hListView, $sPathInstall, _
$aFiles, $fSelect, $sParam, $iCount, $sFileName, $sTitle = 'Установка Updater'
If WinExists($sTitle & '{[/@$@\]}') Then Exit
AutoItWinSetTitle($sTitle & '{[/@$@\]}')
$hGui = GUICreate($sTitle, 305, 244, -1, -1, -1, $WS_EX_TOPMOST)
GUISetBkColor(0xF5F5DC)
$nInputDirInstall = GUICtrlCreateInput('Папка для установки Updater', 10, 10, 250, 22, _
$ES_READONLY, $WS_EX_DLGMODALFRAME)
GUICtrlSetBkColor(-1, 0xDCDCDC)
$nButtonSelectInstall = GUICtrlCreateButton('...', 265, 9, 30, 24)
GUICtrlSetFont(-1, 16)
GUICtrlSetTip(-1, 'Выбрать папку для установки Updater')
GUICtrlSetCursor(-1, 0)
$nInputDirShortcut = GUICtrlCreateInput('Папка для создания ярлыка для Updater', 10, 42, 250, 22, _
$ES_READONLY, $WS_EX_DLGMODALFRAME)
GUICtrlSetBkColor(-1, 0xDCDCDC)
$nButtonSelectShortcut = GUICtrlCreateButton('...', 265, 41, 30, 24)
GUICtrlSetFont(-1, 16)
GUICtrlSetTip(-1, 'Выбрать папку для создания ярлыка для Updater')
GUICtrlSetCursor(-1, 0)
$nButtonInstall = GUICtrlCreateButton('Установить', 100, 204, 105, 30)
GUICtrlSetTip(-1, 'Установить Updater для выбранных файлов')
GUICtrlSetCursor(-1, 0)
GUICtrlSetState(-1, $GUI_DISABLE)
$nListView = GUICtrlCreateListView('', 10, 74, 285, 120, $LVS_SINGLESEL, BitOR($LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES))
$hListView = GUICtrlGetHandle(-1)
_GUICtrlListView_AddColumn($hListView, 'Файлы для обновления', 275)
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $nButtonSelectInstall
$sPathInstall = FileSelectFolder('Выберите папку для установки Updater', '', 2, '', $hGui)
If @error Or Not FileExists($sPathInstall) Then
$sPathInstall = ''
ContinueLoop
EndIf
If $fSelect Then
_GUICtrlListView_DeleteAllItems($hListView)
EndIf
$aFiles = _FileListToArray($sPathInstall, '*.exe', 1)
If @error Then
GUICtrlSetData($nInputDirInstall, 'Ошибка поиска файлов *.exe')
GUICtrlSetState($nButtonInstall, $GUI_DISABLE)
GUICtrlSetTip($nListView, '')
ContinueLoop
Else
GUICtrlSetData($nInputDirInstall, $sPathInstall)
EndIf
For $i = 1 To $aFiles[0]
If $aFiles[$i] <> 'Updater.exe' Then
_GUICtrlListView_AddItem($hListView, $aFiles[$i])
EndIf
Next
$fSelect = True
GUICtrlSetTip($nListView, 'Отметьте файлы, которые надо обновлять')
If FileExists(GUICtrlRead($nInputDirShortcut)) Then
GUICtrlSetState($nButtonInstall, $GUI_ENABLE)
EndIf
$sPathInstall = ''
$aFiles = 0
Case $nButtonSelectShortcut
$sPathShortcut = FileSelectFolder('Выберите папку для установки ярлыка для Updater', '', 2, '', $hGui)
If @error Or Not FileExists($sPathShortcut) Then
$sPathShortcut = ''
ContinueLoop
EndIf
GUICtrlSetData($nInputDirShortcut, $sPathShortcut)
If FileExists(GUICtrlRead($nInputDirInstall)) Then
GUICtrlSetState($nButtonInstall, $GUI_ENABLE)
EndIf
$sPathShortcut = ''
Case $nButtonInstall
$sPathInstall = GUICtrlRead($nInputDirInstall)
If Not FileExists($sPathInstall) Then ContinueLoop
$sPathShortcut = GUICtrlRead($nInputDirShortcut)
If Not FileExists($sPathShortcut) Then ContinueLoop
$iCount = _GUICtrlListView_GetItemCount($hListView)
If Not $iCount Then ContinueLoop
For $i = 0 To $iCount - 1
If _GUICtrlListView_GetItemChecked($hListView, $i) Then
$sFileName = _GUICtrlListView_GetItemText($hListView, $i)
If StringInStr($sFileName, Chr(32)) Then $sFileName = '"' & $sFileName & '"'
$sParam &= $sFileName & Chr(32)
EndIf
Next
If Not $sParam Then ContinueLoop
$sParam = StringTrimRight($sParam, 1)
If MsgBox(33, $sTitle, 'Папка установки Updater:' & @CRLF & '<' & $sPathInstall & '>' & _
@CRLF & @CRLF & 'Папка создания ярлыка для Updater:' & @CRLF & '<' & $sPathShortcut & '>' & _
@CRLF & @CRLF & 'Будут обновляться файл(ы): ' & $sParam & _
@CRLF & @CRLF & 'OK - установить и создать ярлык' & @CRLF & _
'Отмена - отменить', 0, $hGui) <> 1 Then ContinueLoop
If Not FileInstall('Updater.exe', $sPathInstall & '\Updater.exe', 1) Then
TrayTip($sTitle, 'Произошла ошибка установки файла Updater', 5, 3)
EndIf
If FileExists($sPathShortcut & '\Обновление.lnk') Then FileDelete($sPathShortcut & '\Обновление.lnk')
If Not FileCreateShortcut($sPathInstall & '\Updater.exe', $sPathShortcut & '\Обновление.lnk', '', _
$sParam, 'Обновление файла(ов) ' & $sParam, $sPathInstall & '\Updater.exe') Then
TrayTip($sTitle, 'Произошла ошибка создания ярлыка для Updater', 5, 3)
EndIf
GUICtrlSetState($nButtonInstall, $GUI_DISABLE)
$iCount = 0
$sParam = ''
EndSwitch
WEnd