скрипт для управления wim-файлом

Ответить
 • Просмотры: 1
Аватара пользователя
mamont1

скрипт для управления wim-файлом

Сообщение mamont1 »

Здесь скрипт для перепаковки WIM_ов из контекстного меню




Изображение




сам скрипт - wimmenu.au3






Код:

Код: Выделить всё

#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








Здесь собственно просьба



Цитата:



есть замечательный скрипт для управления wim-файлом из контекстного меню.

http://forum.ru-board.com/topic.cgi?...&start=2360#15
[?]

Я его чуть подправил, что-бы монтировать образы заливок на диск


Здесь: что на что поменял






Код:

Код: Выделить всё

GUICtrlSetData(-1,'Здесь|temp|C:\|D:\|B:\', 'Здесь') 
GUICtrlSetData(-1,'C:\|D:\|F:\', 'C:\') 
GUICtrlSetTip($folder, "Куда извлекаем?"&@CRLF&"папка wim_%name_wim%") 
GUICtrlSetTip($folder, "Куда извлекаем?"&@CRLF&"выберите диск") 
                If not FileExists($folder0&'\wim_'&$namewim) Then DirCreate($folder0&'\wim_'&$namewim) 
                If not FileExists($folder0) Then DirCreate($folder0) 
                Run('Explorer.exe /select,'&$folder0&'\wim_'&$namewim)         
                Run('Explorer.exe /select,'&$folder0)








Работает, но перед монтированием необходимо форматировать партицию (диск).



Просьба - Перелопатить скрипт:

1. убрав всё, что связанно с перепаковкой

2. добавить галочку о форматировании

3. в контекстном меню для WIM_ов добавить что-нить от сюда

http://i838.photobucket.com/albums/z...ImageX/GUI.gif


скажем - "Развернуть Образ WIM"



Но человек видимо занят, мож тема "Развёртывания образа из WIM" не интересует ...



Уважаемые Гуру Автоита - помогите, забабахайте скрипт.



Очень актуально к теме
Инструменты для клонирования (развертывание из образа) Windows XP
Аватара пользователя
Creat0R

Re: скрипт для управления wim-файлом

Сообщение Creat0R »

mamont1,

Почему участники раздела должны ещё на другой форум идти и читать ваш вопрос, если вам нужна помощь, то вы как минимум сделаете всё чтобы тому кто захочет вам помочь, было максимально доступно и понятно всё что связанно с вашей проблемой.
Аватара пользователя
mamont1

Re: скрипт для управления wim-файлом

Сообщение mamont1 »

Не понял как пользоваться скриптом... Запускаю и ничего
Ответить

Вернуться в «AutoIt»