Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   скрипт для управления wim-файлом (http://forum.oszone.net/showthread.php?t=170109)

mamont1 14-03-2010 15:50 1368418

скрипт для управления wim-файлом
 
Здесь скрипт для перепаковки 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

Creat0R 14-03-2010 16:30 1368447

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

mamont1 14-03-2010 17:15 1368474

Creat0R Поправил.

Smokie_id11243755 29-08-2010 21:32 1484432

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


Время: 13:49.

Время: 13:49.
© OSzone.net 2001-