Здравствуйте, друзья. В своем скрипте мне приходится пользоваться WinRar'ом, есть GUI, в котором выбираем что и куда распаковывать, потом при помощи ShellExecuteWait запускается программа распаковки. Вопрос: как считать коды возвращаемых WinRarом ошибок и можно ли прогресс бар распаковки WinRARа отобразить в GUI скрипта?
В ини-файле должно быть что-то типа
[Destination]
Dest.1 = C:\Temp
В ини-файле должно быть что-то типа
[Destination]
Dest.1 = C:\Temp
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <ListBoxConstants.au3>
#include <GuiListBox.au3>
#include <GuiRichEdit.au3>
#Region ### START Koda GUI section ###
$ImportForm = GUICreate("Импорт файлов", 322, 458, 733, 343)
$ImportProgress = GUICtrlCreateProgress(10, 430, 300, 17, BitOR($PBS_SMOOTH,$WS_BORDER))
$Output = GUICtrlCreateCombo("", 10, 190, 300, 25, $CBS_DROPDOWNLIST)
$ImportInfo = _GUICtrlRichEdit_Create($ImportForm,"", 10, 220, 300, 175, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL,$ES_READONLY))
$FileInfo= GUICtrlCreateList("", 10, 35, 300, 150, BitOR($ES_AUTOVSCROLL,$ES_WANTRETURN,$WS_VSCROLL,$GUI_SS_DEFAULT_LIST,$LBS_NOINTEGRALHEIGHT), $WS_EX_STATICEDGE)
GUICtrlSetData(-1, "")
$ButtonImport = GUICtrlCreateButton("Импортировать файлы", 10, 400, 300, 25, $WS_GROUP)
$LabelAdd = GUICtrlCreateLabel("Добавьте файл в список импорта", 10, 10, 180, 21)
$ButtonClear = GUICtrlCreateButton("", 275, 0, 35, 35,$BS_ICON)
GUICtrlSetImage($ButtonClear, "imageres.dll", -85)
GUICtrlSetTip($ButtonClear, "Очистить список")
$ButtonMinus = GUICtrlCreateButton("", 235, 0, 35, 35,$BS_ICON)
GUICtrlSetImage($ButtonMinus, "shell32.dll", -235)
GUICtrlSetTip($ButtonMinus, "Удалить файл из списка")
$ButtonPlus = GUICtrlCreateButton("", 195, 0, 35, 35,$BS_ICON)
GUICtrlSetImage($ButtonPlus, "shell32.dll", -280)
GUICtrlSetTip($ButtonPlus, "Добавить файл в список")
GUISetState(@SW_SHOW)
;######################################### INI #####################################################
$iniDir = IniReadSection("INI.ini", "Directory")
;_ArrayDisplay($iniDir)
$iniDirDef = IniRead("INI.ini", "LastDestination", "LastDest", "")
If Not $iniDir then
$iniDirNum = $iniDir[0][0]
For $i=1 to $iniDirNum
GUICtrlSetData($Output, $iniDir[$i][1], $iniDirDef)
Next
EndIf
$iniList = IniReadSection("INI.ini", "LastImportList")
If Not $iniList then
$iniListNum = $iniList[0][0]
For $i=1 to $iniListNum
GUICtrlSetData($FileInfo, $iniList[$i][1])
Next
EndIf
;######################################## INI ####################################################
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
IniDelete ("INI.ini", "LastImportList")
$sList_String = ""
$iCount = _GUICtrlListBox_GetCount($FileInfo)
For $i = 0 To $iCount-1
$sList_String = _GUICtrlListBox_GetText($FileInfo, $i)
IniWrite("INI.ini" ,"LastImportList", "File."&$i, $sList_String)
Next
IniWrite("INI.ini" ,"LastDestination", "LastDest", GuiCtrlRead($Output))
_GUICtrlRichEdit_Destroy($ImportInfo)
Exit
Case $ButtonPlus
$FileName = FileOpenDialog("Выберите файл", "C:\Temp", "Файлы (*.dat)", 1 + 2 + 4)
$MassFile = StringSplit($FileName,"|")
If $MassFile[0]==1 Then
If $MassFile[1] <> "" then GUICtrlSetData($FileInfo, $MassFile[1], 1)
Else
For $i=1 to $MassFile[0]-1
GUICtrlSetData($FileInfo, $MassFile[1]&"\"&$MassFile[$i+1], 1)
Next
EndIf
Case $ButtonMinus
$tmp = GUICtrlSendMsg($FileInfo, $LB_GETCURSEL, 0, 0)
GUICtrlSendMsg($FileInfo, $LB_DELETESTRING, $tmp, 0)
Case $ButtonClear
GUICtrlSetData($FileInfo, "")
Case $ButtonImport
$ListCount = GUICtrlSendMsg($FileInfo, $LB_GETCOUNT, 0, 0)
$PercentFile = 100/$ListCount
$sList_String = ""
$iCount = _GUICtrlListBox_GetCount($FileInfo)
If Not $iCount then
MsgBox(0,"Предупреждение", "Список для импортирования пуст")
Else
If Not GuiCtrlRead($Output) then
MsgBox(0,"Предупреждение", "Выберите папку для распаковки архива")
Else
GUICtrlSetState($ButtonClear,$GUI_DISABLE)
GUICtrlSetState($ButtonMinus,$GUI_DISABLE)
GUICtrlSetState($ButtonPlus,$GUI_DISABLE)
GUICtrlSetState($Output,$GUI_DISABLE)
_GUICtrlRichEdit_SetCharAttributes($ImportInfo, "+bo")
_GUICtrlRichEdit_AppendText($ImportInfo,'Импортирование файлов('&$ListCount&')'&@CR)
For $i=0 to $ListCount-1
$File = _GUICtrlListBox_GetText($FileInfo, $i)
$FName = StringRegExp($File, "([^.\\]+)\.", 1)
_GUICtrlRichEdit_AppendText($ImportInfo, $FName[0]&'.dat')
$Command = "C:\Program Files\WinRAR\WinRAR.exe"
$Param = 'x -ad -o- '&$File&' '&GuiCtrlRead($Output)&'\'
$iPID = ShellExecuteWait($Command, $Param)
GUICtrlSetData($ImportProgress,$PercentFile*($i+1))
$ImportWay = GuiCtrlRead($Output)&'\'&$FName[0]&'\ExportData\'
_GUICtrlRichEdit_SetCharAttributes($ImportInfo, "+it")
_GUICtrlRichEdit_AppendText($ImportInfo,' -- импортировано'&@CR)
Next
_GUICtrlRichEdit_SetCharAttributes($ImportInfo, "+bo")
_GUICtrlRichEdit_AppendText($ImportInfo,'Импортирование завершено'&@CR)
_GUICtrlRichEdit_AppendText($ImportInfo,'--------------------------------------------------------------------------------------------'&@CR)
GUICtrlSetState($ButtonClear,$GUI_ENABLE)
GUICtrlSetState($ButtonMinus,$GUI_ENABLE)
GUICtrlSetState($ButtonPlus,$GUI_ENABLE)
GUICtrlSetState($Output,$GUI_ENABLE)
EndIf
EndIf
EndSwitch
WEnd