Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » скрипт для управления wim-файлом

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

Старожил


Сообщения: 413
Благодарности: 161

Профиль | Отправить PM | Цитировать


Изменения
Автор: mamont1
Дата: 14-03-2010
Здесь скрипт для перепаковки 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).*<NAME>(.*)</NAME>.*", "\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

Отправлено: 15:50, 14-03-2010

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 16:30, 14-03-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 413
Благодарности: 161

Профиль | Отправить PM | Цитировать


Creat0R Поправил.

Отправлено: 17:15, 14-03-2010 | #3


Пользователь


Сообщения: 65
Благодарности: 3

Профиль | Отправить PM | Цитировать


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

Отправлено: 21:32, 29-08-2010 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » скрипт для управления wim-файлом

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Средства для подготовки, создания и развертывания WIM образов (статья) alexandr100 Автоматическая установка Windows 2000/XP/2003 0 01-03-2010 19:55
Разное - Оболочка для установки XP из WIM образа .:[invisible]:. Программирование и базы данных 11 04-12-2009 20:29
Скрипт для смены сочетания клавишь для переключения регистра zegerman Хочу все знать 2 03-12-2009 08:06
[решено] Нужен скрипт для autoit для раскопирования файла irk72ag Автоматическая установка приложений 3 19-06-2009 15:27
Ошибка при работе с файлом панели управления lightangel Microsoft Windows 95/98/Me (архив) 4 20-02-2003 16:53




 
Переход