#include <file.au3>
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ###
$Form1_1 = GUICreate("Надстройка WinRar", 627, 280, -1, -1)
$Label1 = GUICtrlCreateLabel("Список файлов для архивации (файл-лист):", 16, 8, 223, 17)
$Edit1 = GUICtrlCreateEdit("", 8, 32, 281, 145, BitOR($GUI_SS_DEFAULT_EDIT,$ES_READONLY))
GUICtrlSetData(-1, "")
$Button1 = GUICtrlCreateButton("Добавить файлы", 8, 184, 105, 25)
$Button2 = GUICtrlCreateButton("Выход", 512, 184, 105, 25)
$Button3 = GUICtrlCreateButton("Архивировать", 232, 184, 105, 25)
$Button4 = GUICtrlCreateButton("Установить пароль", 344, 184, 161, 25)
$Button5 = GUICtrlCreateButton("Очистить", 120, 184, 105, 25)
$Label2 = GUICtrlCreateLabel("Имя архива:", 296, 8, 67, 17)
$Input1 = GUICtrlCreateInput("TestArchive", 296, 32, 321, 21)
$Group1 = GUICtrlCreateGroup("Формат архива", 296, 56, 105, 65)
$Radio1 = GUICtrlCreateRadio("RAR", 304, 72, 49, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
$Radio2 = GUICtrlCreateRadio("ZIP", 304, 96, 49, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Label3 = GUICtrlCreateLabel("Метод сжатия:", 296, 128, 79, 17)
$Combo1 = GUICtrlCreateCombo("Обычный", 296, 152, 105, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Без сжатия|Скоростной|Быстрый|Обычный|Хороший|Максимальный")
$Group2 = GUICtrlCreateGroup("Параметры архивации", 408, 56, 209, 113)
$Checkbox1 = GUICtrlCreateCheckbox("SFX-архив", 416, 72, 97, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Информация для восстановления", 416, 96, 193, 17)
$Checkbox3 = GUICtrlCreateCheckbox("Тестировать после упаковки", 416, 120, 185, 17)
$Checkbox4 = GUICtrlCreateCheckbox("Заблокировать архив", 416, 144, 193, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Input2 = GUICtrlCreateInput("", 120, 240, 497, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_READONLY))
$Label4 = GUICtrlCreateLabel("Путь к архиватору WinRAR.exe:", 7, 217, 200, 17)
$Button6 = GUICtrlCreateButton("Обзор", 8, 240, 105, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
GUICtrlSetData($Edit1, ListShow())
$RarPath = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinRAR archiver", "DisplayIcon")
If $RarPath = "" Then
MsgBox(16, "Инфо", "Не найден архиватор WinRAR."&@CRLF&"Укажите путь к WinRAR.exe вручную (кнопка Обзор).")
Else
GUICtrlSetData($Input2, $RarPath)
EndIf
$Password = ""
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Radio1 ;RAR
GUICtrlSetState ( $Checkbox2, $GUI_ENABLE)
GUICtrlSetState ( $Checkbox4, $GUI_ENABLE)
Case $Radio2;ZIP
GUICtrlSetState ( $Checkbox2, $GUI_UNCHECKED)
GUICtrlSetState ( $Checkbox2, $GUI_DISABLE)
GUICtrlSetState ( $Checkbox4, $GUI_UNCHECKED)
GUICtrlSetState ( $Checkbox4, $GUI_DISABLE)
Case $Button1 ;Добавить файлы
AddFiles()
GUICtrlSetData($Edit1, ListShow())
Case $Button2 ;Выход
Exit
Case $Button3 ;Архивировать
Archive()
Case $Button4 ;Установить пароль
$Password = InputBox("Архивация с паролем", "Введите пароль:", "", "*", 300, 50)
Case $Button5 ;Очистить
ListClear()
GUICtrlSetData($Edit1, ListShow())
Case $Button6 ;Обзор
GUICtrlSetData($Input2, AddPatchRar())
EndSwitch
WEnd
Func AddPatchRar()
$message = "Укажите путь к WinRAR.exe"
$Patch = FileOpenDialog($message, @HomeDrive, "Программы (*.exe)", 4)
If @error Then
MsgBox(48,"Инфо","Файлы не выбраны.")
Else
MsgBox(64, "RAR", $Patch)
Return $Patch
EndIf
EndFunc
Func AddFiles()
$message = "Удерживайте Ctrl или Shift для выбора нескольких файлов."
$var1 = FileOpenDialog($message, @DesktopDir, "Все файлы (*.*)", 4)
If @error Then
MsgBox(48,"Инфо","Файлы не выбраны.")
Else
$file = FileOpen(@ScriptDir&"\"&"ArchiveList.lst", 1)
$result = StringInStr($var1, "|")
If $result = 0 Then
FileWriteLine($file, $var1)
EndIf
$var1 = StringSplit($var1, "|")
If $file = -1 Then
MsgBox(16, "Ошибка", "Невозможно открыть файл.")
Exit
EndIf
For $i = 2 To $var1[0]
FileWriteLine($file, $var1[1]&"\"&$var1[$i])
Next
FileClose($file)
EndIf
EndFunc
Func ListShow()
$file = FileOpen(@ScriptDir&"\"&"ArchiveList.lst", 0)
$List = FileRead($file)
FileClose($file)
Return $List
EndFunc
Func ListClear()
If Not _FileCreate(@ScriptDir&"\"&"ArchiveList.lst") Then
MsgBox(16,"Ошибка", " Ошибка создания или очистки файл-листа. Ошибка:" & @error)
EndIf
EndFunc
Func Archive()
$RarPatch = GUICtrlRead($Input2)
$Rar = '"'&$RarPatch&'"'
$Command = " a "
$PatchArchive = "D:\proggg\rar_tools\"
$NameArchive = "ArchiveBackup"
$ArchiveList = " @"& @ScriptDir & "\" & "ArchiveList.lst"
$FormatArchive = ""
$SFX = ""
$Recovery = ""
$Testing = ""
$Lock = ""
$Compress = ""
$Pass = ""
$State1 = GUICtrlRead($Radio1)
$State2 = GUICtrlRead($Checkbox1)
$State3 = GUICtrlRead($Checkbox2)
$State4 = GUICtrlRead($Checkbox3)
$State5 = GUICtrlRead($Checkbox4)
$State6 = GUICtrlRead($Combo1)
$State7 = GUICtrlRead($Input1)
Switch $State6
Case "Без сжатия"
$Compress = "-m0 "
Case "Скоростной"
$Compress = "-m1 "
Case "Быстрый"
$Compress = "-m2 "
Case "Обычный"
$Compress = "-m3 "
Case "Хороший"
$Compress = "-m4 "
Case "Максимальный"
$Compress = "-m5 "
EndSwitch
If $State1 = 1 Then
$FormatArchive = ".rar"
Else
$FormatArchive = ".zip"
EndIf
If $State2 = 1 Then
$SFX = "-sfx " ;SFX архив
EndIf
If $State3 = 1 Then
$Recovery = "-rr5p " ; информация для восстановления (5%)
EndIf
If $State4 = 1 Then
$Testing = "-t " ; тестировать после упаковки
EndIf
If $State5 = 1 Then
$Lock = "-k " ; заблокировать архив
EndIf
If $State7 <> "" Then
$NameArchive = $State7 ; имя архива
EndIf
If $Password <> "" Then
$Pass = "-hp"&$Password&" " ; пароль на архив и имена файлов в архиве
EndIf
If $RarPatch = "0" Then
MsgBox(16, "Ошибка", "Путь к архиватору WinRAR.exe не указан!")
Else
Run($Rar&$Command&$SFX&$Recovery&$Testing&$Lock&$Compress&$Pass&$PatchArchive&$NameArchive&$FormatArchive&$ArchiveList)
EndIf
EndFunc