#NoTrayIcon ;скрыть в системной панели индикатор AutoIt Global $folder0, $boot0, $metka0, $tom0, $rw0 Global $aPathexe[1] $close = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\script_az\contmenu_WIM", "close") If @error=1 Then RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\script_az\contmenu_WIM", "close", "REG_SZ", "0") $close = '0' EndIf $Pathname = StringTrimLeft($CmdLineRaw, StringLen('"'&@ScriptFullPath&'" ')) If $Pathname='' Then Exit $aPath=StringRegExp($Pathname, "(^.*)\\(.*)$", 3) $namewim=StringTrimRight($aPath[1], 4) $wimlist='' For $i=1 To 20 ; Вытаскиваем метку WIM-файла $rnim = Run(@SystemDir&'\imagex.exe /info "'&$Pathname&'" '&$i, @SystemDir, @SW_HIDE, 2) $wiminfo1='' While 1 $line1 = StdoutRead($rnim) If @error Then ExitLoop $wiminfo1 &= $line1 Wend ;MsgBox(0, "инфа",$wiminfo1) $wiminfo1 = StringRegExpReplace($wiminfo1, "(?s).*(.*).*", "\1") If $wiminfo1='' and $i=1 Then MsgBox(0, "Неувязочка", 'Не найдена метка wim-файла.'&@CRLF&'Без метки извлечь wim-файл невозможно.') Exit EndIf If $wiminfo1='' or StringInStr($wiminfo1,@CRLF)<>0 Then ExitLoop If $i=1 Then $wiminfo=$wiminfo1 $wimlist&=$wiminfo1&'|' Next ; конец - Вытаскиваем метку WIM-файла GUICreate($aPath[1],310,167) ; размер окна $tab=GUICtrlCreateTab (0,0, 310,148) ; размер вкладки $checkclose=GUICtrlCreateCheckbox ("Закрывать диалог при клике на кнопке", 10,10,290,24) If $close = '1' Then GuiCtrlSetState(-1, 1) $extract=GUICtrlCreateButton ("Извлечь", 10,40,90,24) GUICtrlSetTip(-1, "Извлечь") $pack=GUICtrlCreateButton ("Упаковать", 110,40,90,24) GUICtrlSetTip(-1, "Папка извлечения удалится.") GUICtrlSetState($pack, 128) $append=GUICtrlCreateButton ("Добавить", 210,40,90,24) GUICtrlSetTip(-1, "Добавить новый том к wim"&@CRLF&"Обязательно изменить метку"&@CRLF&"добавляемого тома") $mount=GUICtrlCreateButton ("Монтир", 10,70,70,24) GUICtrlSetTip(-1, "Монтировать "&$aPath[1]) $rw=GUICtrlCreateCheckbox ("RW", 90,70,40,24) GuiCtrlSetState(-1, 1) ; закомментировать эту строку, если не нужна отмеченная галочка RW GUICtrlSetTip($rw, "RW - с поддержкой изменения"&@CRLF&"файлов в каталоге монтирования") $create=GUICtrlCreateButton ("Упаковать", 140,70,75,24) GUICtrlSetState($create, 128) $unmount=GUICtrlCreateButton ("Демонтир", 225,70,75,24) GUICtrlSetState($unmount, 128) $folder=GUICtrlCreateCombo ("", 10,100,70,24) GUICtrlSetData(-1,'Здесь|temp|C:\|D:\|B:\', 'Здесь') GUICtrlSetTip($folder, "Куда извлекаем?"&@CRLF&"папка wim_%name_wim%") ;$tom=GUICtrlCreateCombo ("", 100,100,40,24) ;GUICtrlSetData(-1,'1|2|3|4|5|6', '1') ;GUICtrlSetTip($tom, "Номер тома,"&@CRLF&"необходим при упаковке") $metka=GUICtrlCreateCombo ("", 90,100,150,24) GUICtrlSetData(-1,$wimlist&'1|wimpe|remark', $wiminfo) GUICtrlSetTip($metka, "Метка тома."&@CRLF&"Первая в списке оригинальная") $boot=GUICtrlCreateCheckbox ("boot", 250,100,50,24) GUICtrlSetTip(-1, "Для загрузочных wim-файлов"&@CRLF&"WinPe.wim, BootSdi.wim") GUICtrlCreateTabitem ("") ; конец вкладок $Label000=GUICtrlCreateLabel ('Строка состояния', 5,150,234,-1) $LabelMb=GUICtrlCreateLabel ('', 240,148,80,20) GUICtrlSetFont (-1,14) GUISetState () While 1 $msg = GUIGetMsg() Select Case $msg = $extract GUICtrlSetState($mount, 128) GUICtrlSetState($rw, 128) GUICtrlSetData($Label000, 'Извлечение '&$aPath[1]) _read() If not FileExists($folder0&'\wim_'&$namewim) Then DirCreate($folder0&'\wim_'&$namewim) ShellExecuteWait (@SystemDir&'\imagex.exe','/apply "'&$Pathname&'" "'&$metka0&'" "'&$folder0&'\wim_'&$namewim&'"','','', @SW_HIDE ) GUICtrlSetData($Label000, 'Извлечение выполнено.') GUICtrlSetState($pack, 64) Run('Explorer.exe /select,'&$folder0&'\wim_'&$namewim) If GUICtrlRead ($checkclose) = 1 Then Exit Case $msg = $pack GUICtrlSetState($extract, 128) _read() GUICtrlSetData($Label000, 'Упаковывается в '&$aPath[1]&'_New.wim.') ; упаковка wim с прогресс-баром $ProgressBar = GUICtrlCreateProgress(50, 127, 200, 14) GUICtrlSetColor(-1, 32250); цвет для классической темы $iPos = 0 $iPID = Run(@SystemDir&'\imagex.exe /capture'&$boot0&'"'&$folder0&'\wim_'&$namewim&'" "'&$folder0&'\'&$namewim&'_New.wim" "'&$metka0&'" /compress maximum', '', @SW_HIDE) While ProcessExists($iPID) $sizewim='' If FileExists($folder0&'\'&$namewim&'_New.wim') Then $sizewim=FileGetSize($folder0&'\'&$namewim&'_New.wim') $sizewim /=1048576 $sizewim=Ceiling ($sizewim) GUICtrlSetData($LabelMb, $sizewim&' Мб') $iPos += 1 GUICtrlSetData($ProgressBar, $iPos) Sleep(60) If $iPos > 100 Then $iPos = 0 WEnd If FileExists($folder0&'\'&$namewim&'_New.wim') Then $sizewim=FileGetSize($folder0&'\'&$namewim&'_New.wim') $sizewim /=1048576 $sizewim=Ceiling ($sizewim) GUICtrlSetData($LabelMb, $sizewim&' Мб') GUICtrlSetColor($LabelMb,0xEE0000) ; Red GUICtrlDelete($ProgressBar) ; конец: упаковка wim с прогресс-баром GUICtrlSetData($Label000, 'Готово !!! Размер: '&$sizewim&' Мб.') DirRemove($folder0&'\wim_'&$namewim, 1) DllCall("shell32.dll", "none", "SHChangeNotify", "long", '0x8000000', "uint", '0x1000', "ptr", '0', "ptr", '0') Run('Explorer.exe /select,"'&$folder0&'\'&$namewim&'_New.wim"') GUICtrlSetState($extract, 64) GUICtrlSetState($mount, 64) GUICtrlSetState($pack, 128) GUICtrlSetState($rw, 64) If GUICtrlRead ($checkclose) = 1 Then Exit Case $msg = $append GUICtrlSetState($extract, 128) GUICtrlSetState($mount, 128) GUICtrlSetState($rw, 128) _read() If StringInStr($wimlist,$metka0)<>0 Then MsgBox(0, "Ошибка", 'Нельзя добавить к wim-у том'&@CRLF&'с меткой, уже имеющейся в wim-е'&@CRLF&'Измените метку "'&$metka0&'"') _enb() ContinueLoop EndIf $folderwim = FileSelectFolder ( "Указать добавляемую папку",'','3',@WorkingDir & '') If @error=1 Then _enb() ContinueLoop EndIf $msgapp=MsgBox(4, "Выгодное предложение", 'Добавить к оригиналу?'&@CRLF&@CRLF&'"Да" - к '&$aPath[1]&@CRLF&'"Нет" - к '&$namewim&'_New.wim') ; добавление к wim с прогресс-баром $ProgressBar = GUICtrlCreateProgress(50, 127, 200, 14) GUICtrlSetColor(-1, 32250); цвет для классической темы $iPos = 0 If $msgapp=6 Then $appname=$aPath[1] If $msgapp=7 Then $appname=$namewim&'_New.wim' GUICtrlSetData($Label000, 'Добавляем к '&$appname) $iPID = Run(@SystemDir&'\imagex.exe /append'&$boot0&'"'&$folderwim&'" "'&$folder0&'\'&$appname&'" "'&$metka0&'"', '', @SW_HIDE) While ProcessExists($iPID) $sizewim='' If FileExists($folder0&'\'&$appname) Then $sizewim=FileGetSize($folder0&'\'&$appname) $sizewim /=1048576 $sizewim=Ceiling ($sizewim) GUICtrlSetData($LabelMb, $sizewim&' Мб') $iPos += 1 GUICtrlSetData($ProgressBar, $iPos) Sleep(60) If $iPos > 100 Then $iPos = 0 WEnd If FileExists($folder0&'\'&$appname) Then $sizewim=FileGetSize($folder0&'\'&$appname) $sizewim /=1048576 $sizewim=Ceiling ($sizewim) GUICtrlSetData($LabelMb, $sizewim&' Мб') GUICtrlSetColor($LabelMb,0xEE0000) ; Red GUICtrlDelete($ProgressBar) ; конец: добавление к wim с прогресс-баром GUICtrlSetData($Label000, 'Готово !!! Размер: '&$sizewim&' Мб.') Run('Explorer.exe /select,"'&$folder0&'\'&$appname&'"') _enb() If GUICtrlRead ($checkclose) = 1 Then Exit Case $msg = $mount GUICtrlSetState($extract, 128) _read() If not FileExists($folder0&'\wim_'&$namewim) Then DirCreate($folder0&'\wim_'&$namewim) ShellExecuteWait (@SystemDir&'\imagex.exe',$rw0&' "'&$Pathname&'" "'&$metka0&'" "'&$folder0&'\wim_'&$namewim&'"','','', @SW_HIDE ) GUICtrlSetData($Label000, 'Монтирование выполнено.') GUICtrlSetState($create, 64) GUICtrlSetState($unmount, 64) Run('Explorer.exe /select,'&$folder0&'\wim_'&$namewim) If GUICtrlRead ($checkclose) = 1 Then Exit Case $msg = $unmount GUICtrlSetState($create, 128) GUICtrlSetState($mount, 128) ShellExecuteWait (@SystemDir&'\imagex.exe','/unmount "'&$folder0&'\wim_'&$namewim&'"','','', @SW_HIDE ) DirRemove($folder0&'\wim_'&$namewim, 1) GUICtrlSetState($mount, 64) GUICtrlSetState($extract, 64) GUICtrlSetState($unmount, 128) If GUICtrlRead ($checkclose) = 1 Then Exit Case $msg = $create GUICtrlSetState($unmount, 128) GUICtrlSetState($mount, 128) _read() GUICtrlSetData($Label000, 'Упаковывается в '&$aPath[1]&'_New.wim.') ; упаковка wim с прогресс-баром $ProgressBar = GUICtrlCreateProgress(50, 127, 200, 14) GUICtrlSetColor(-1, 32250); цвет для классической темы $iPos = 0 $iPID = Run(@SystemDir&'\imagex.exe /capture'&$boot0&'"'&$folder0&'\wim_'&$namewim&'" "'&$folder0&'\'&$namewim&'_New.wim" "'&$metka0&'" /compress maximum', '', @SW_HIDE) While ProcessExists($iPID) $sizewim='' If FileExists($folder0&'\'&$namewim&'_New.wim') Then $sizewim=FileGetSize($folder0&'\'&$namewim&'_New.wim') $sizewim /=1048576 $sizewim=Ceiling ($sizewim) GUICtrlSetData($LabelMb, $sizewim&' Мб') $iPos += 1 GUICtrlSetData($ProgressBar, $iPos) Sleep(60) If $iPos > 100 Then $iPos = 0 WEnd If FileExists($folder0&'\'&$namewim&'_New.wim') Then $sizewim=FileGetSize($folder0&'\'&$namewim&'_New.wim') $sizewim /=1048576 $sizewim=Ceiling ($sizewim) GUICtrlSetData($LabelMb, $sizewim&' Мб') GUICtrlSetColor($LabelMb,0xEE0000) ; Red GUICtrlDelete($ProgressBar) ; конец: упаковка wim с прогресс-баром GUICtrlSetData($Label000, 'Готово !!! Размер: '&$sizewim&' Мб.') DirRemove($folder0&'\wim_'&$namewim, 1) Run('Explorer.exe /select,"'&$folder0&'\'&$namewim&'_New.wim"') GUICtrlSetState($unmount, 64) DllCall("shell32.dll", "none", "SHChangeNotify", "long", '0x8000000', "uint", '0x1000', "ptr", '0', "ptr", '0') If GUICtrlRead ($checkclose) = 1 Then Exit Case $msg = $checkclose If GUICtrlRead ($checkclose) = 1 Then RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\script_az\contmenu_WIM", "close", "REG_SZ", "1") Else RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\script_az\contmenu_WIM", "close", "REG_SZ", "0") EndIf Case $msg = -3 ExitLoop EndSelect WEnd Func _read() $folder0=GUICtrlRead ($folder) ;$tom0=GUICtrlRead ($tom) $metka0=GUICtrlRead ($metka) If $metka0='' Then $metka0=$wiminfo If GUICtrlRead ($boot) = 1 Then $boot0=' /boot ' Else $boot0=' ' Endif If GUICtrlRead ($rw) = 1 Then $rw0='/mountrw' Else $rw0='/mount' Endif Switch $folder0 Case $folder0="Здесь" $folder0 = $aPath[0] Case $folder0="temp" $folder0 = @TempDir Case $folder0="C:\" $folder0 = "C:" Case $folder0="D:\" $folder0 = "D:" Case $folder0="B:\" $folder0 = "B:" Case Else $folder0 = @TempDir EndSwitch EndFunc Func _enb() GUICtrlSetState($extract, 64) GUICtrlSetState($mount, 64) GUICtrlSetState($rw, 64) EndFunc