Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Windows Preinstallation Environment(WinPE) и BartPE LiveCD 7

Модерирует : KLASS, IFkO

vu1tur (27-01-2012 03:24): следующая часть — http://forum.ru-board.com/topic.cgi?forum=62&topic=24098  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

AZJIO



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

В отличии от Fast-Explorer не тормозит открытие меню, но приходится раскрывать диалоговую панель операций. При установленном в сборке AutoIt3 скрипт самоустанавливается, нужно только правильно его назвать - contmenu.au3  

Код:
$password='ru-board' ; указываем пароль для упаковки архивов
$ScanPath = @ProgramFilesDir&'\Scanner\Scanner.exe'
;$ScanPath = 'C:\Program Files\Scanner\Scanner.exe'
$WinRARPath = @ProgramFilesDir&'\WinRAR\WinRAR.exe'
If @ComputerName='WinPE' Then
$AutoIt3Path = @SystemDir & '\AutoIt3.exe'
Else
$AutoIt3Path = @ProgramFilesDir&'\AutoIt3\AutoIt3.exe'
EndIf
#NoTrayIcon ;скрыть в системной панели индикатор AutoIt
Global $Stack[50], $Stack1[50], $aFolder, $aPathexe[1]
 
$close = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\script_az\contmenu", "close")
If @error = 1 Then
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\script_az\contmenu", "close", "REG_SZ", "1")
    $close = '1'
    ;регистрация в реестре и копирование в системную папку при первом запуске
    RegWrite("HKCR\*\shell\contmenu", "", "REG_SZ", 'Управление файлом')
    RegWrite("HKCR\*\shell\contmenu\command", "", "REG_SZ", @AutoItExe & ' "' & @SystemDir & '\contmenu.au3" "%1"')
    RegWrite("HKCR\Folder\shell\contmenu", "", "REG_SZ", 'Управление каталогом')
    RegWrite("HKCR\Folder\shell\contmenu\command", "", "REG_SZ", @AutoItExe & ' "' & @SystemDir & '\contmenu.au3" "%1"')
    If Not FileExists(@SystemDir & '\contmenu.au3') Then FileCopy(@ScriptDir & '\contmenu.au3', @SystemDir, 1)
EndIf
 
If
$CmdLine[0]=0 Then Exit
$sTarget = $CmdLine[1]
$aPath = StringRegExp($sTarget, "(^.*)\\(.*)$", 3)
; если каталог, тогда ... иначе ...
If StringInStr(FileGetAttrib($sTarget), 'D') Then
 
    ; начало создания окна, вкладок, кнопок.
    GUICreate($aPath[1], 310, 165) ; размер окна
    GUICtrlCreateTab(0, 0, 310, 165) ; размер вкладки
 
    $checkclose = GUICtrlCreateCheckbox("Закрывать диалог при клике на кнопке", 10, 10, 290, 24)
    If $close = '1' Then GuiCtrlSetState(-1, 1)
 
    $comstr = GUICtrlCreateButton("cmd", 10, 40, 21, 21, 0x0040)
    GUICtrlSetTip(-1, "Открыть ком-строку отсюда" & @CRLF & "Для выполнения DOS-команд")
    GUICtrlSetImage(-1, @SystemDir & '\cmd.exe', 1, 0)
 
    $Scanner = GUICtrlCreateButton("scn", 315, 40, 21, 21, 0x0040)
    GUICtrlSetTip(-1, "Открыть в Scanner, для просмотра" & @CRLF & "занимаемого пространтсва на харде")
    GUICtrlSetImage(-1, $ScanPath, 1, 0)
    If FileExists($ScanPath) Then GUICtrlSetPos($Scanner, 35, 40)
 
    $Virtcd1 = GUICtrlCreateButton("cd+", 315, 40, 21, 21, 0x0040)
    GUICtrlSetTip(-1, "Создать виртуальный" & @CRLF & "диск Y: из папки")
    GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', 10, 0)
 
    $Virtcd2 = GUICtrlCreateButton("cd-", 315, 40, 21, 21, 0x0040)
    GUICtrlSetTip(-1, "Отключить виртуальный" & @CRLF & "диск Y:")
    GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', 11, 0)
    _subst()
 
    $winrar = GUICtrlCreateButton("rar", 315, 40, 21, 21, 0x0040)
    GUICtrlSetTip(-1, "Упаковать с паролем" & @CRLF & "(указать в скрипте)")
    GUICtrlSetImage(-1, $WinRARPath, 1, 0)
    If FileExists($WinRARPath) Then GUICtrlSetPos($winrar, 85, 40)
 
    $list = GUICtrlCreateButton("", 10, 70, 21, 21, 0x0040)
    GUICtrlSetTip(-1, "Создать список всех файлов и папок," & @CRLF & "только имена, без подкаталогов")
    GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', 2, 0)
    $listfull = GUICtrlCreateCheckbox("Полный путь", 35, 70, 90, 20)
    $subfol = GUICtrlCreateCheckbox("подпапки", 130, 70, 70, 20)
    $Labelkol = GUICtrlCreateLabel("", 210, 70, 90, 20)
 
    $cacls = GUICtrlCreateButton("Доступ", 10, 100, 90, 24)
    GUICtrlSetTip(-1, "Можно дать доступ к папке" & @CRLF & "System Volume Information")
    $accfncombo = GUICtrlCreateCombo("", 105, 100, 95, 24)
    GUICtrlSetData(-1, 'Все|Administrator|Admin|Администратор|System|Гость', 'Все')
    GUICtrlSetTip($accfncombo, "Пользователи и группы")
    $access = GUICtrlCreateCombo("", 205, 100, 95, 24)
    GUICtrlSetData(-1, 'запрет|чтение|запись|изменение|полный', 'полный')
    GUICtrlSetTip(-1, "Тип доступа")
 
    $dfile = GUICtrlCreateButton("Удалить", 10, 130, 55, 24)
    GUICtrlSetTip(-1, "Удалить тип файлов," & @CRLF & "разделяя через ;")
    $delcombo = GUICtrlCreateCombo("", 70, 130, 130, 24)
    GUICtrlSetData(-1, 'bak;gid;log;tmp|htm;html;css;js;php|bmp;gif;jpg;jpeg;png;tif;tiff|exe;msi;scr;dll;cpl;ax|com;sys;bat;cmd', 'bak;gid;log;tmp')
    $checkAtrb = GUICtrlCreateCheckbox("Снять атрибут", 205, 130, 95, 24)
    GuiCtrlSetState(-1, 1)
    GUICtrlSetTip($checkAtrb, "Снимать атрибуты файла" & @CRLF & "для возможности его удалить")
 
    $script = GUICtrlCreateButton("au3", 279, 40, 21, 21, 0x0040)
    GUICtrlSetTip(-1, "Редактировать скрипт" & @CRLF & "(пароль, пути)")
    GUICtrlSetImage(-1, $AutoIt3Path, 1, 0)
 
    GUICtrlCreateTabitem("") ; конец вкладок
 
    GUISetState()
 
    While 1
        $msg = GUIGetMsg()
        Select
            Case
$msg = $script
                 ShellExecute(@ScriptFullPath, '', '', "edit")
            Case $msg = $winrar
                 _winrar()
            Case $msg = $Virtcd1
                Run ( @Comspec&' /C subst y: "'&$sTarget&'"', '', @SW_HIDE )
                Sleep(150)
                _subst()
            Case $msg = $Virtcd2
                Run ( @Comspec&' /C subst y: /d', '', @SW_HIDE )
                Sleep(150)
                _subst()
            Case $msg = $list
                $Text
= ""
                If GUICtrlRead($subfol) = 1 Then ; если подпапки то используем скоростной алгоритм NIKZZZZ
                    FileFindNextFirst($sTarget)
                    While 1
                        $tempname = FileFindNext()
                        If $tempname = "" Then ExitLoop
                        $Text &= $tempname & @CRLF
                    WEnd
                    If GUICtrlRead($listfull) = 4 Then $Text = StringRegExpReplace($Text, "(?:.*)\\(.*\r\n)", '\1')
                Else
                    $aFolder = _FileListToArrayEx($sTarget, "", 0, 0)
                    For $i = 2 To $aFolder[0]
                        If GUICtrlRead($listfull) = 1 Then
                            $Text &= $aFolder[$i] & @CRLF
                        Else
                            $aPath = StringRegExp($aFolder[$i], "(^.*)\\(.*)$", 3)
                            $Text &= $aPath[1] & @CRLF
                        EndIf
                    Next
                EndIf
                ClipPut($Text)
                $file = FileOpen(@TempDir & '\file.txt', 2)
                If $file = -1 Then
                    MsgBox(0, "Ошибка", "Не возможно открыть файл.")
                    Exit
                EndIf
                FileWrite($file, $Text)
                FileClose($file)
                Run('Notepad.exe ' & @TempDir & '\file.txt')
                If GUICtrlRead($checkclose) = 1 Then Exit
            Case $msg = $cacls
                _cacls()
            Case $msg = $Scanner
                ShellExecute($ScanPath, '"' & $sTarget & '"', '', '', @SW_HIDE)
                If GUICtrlRead($checkclose) = 1 Then Exit
            Case $msg = $comstr
                Run(@SystemDir & '\cmd.exe /k cd "' & $sTarget & '"')
                If GUICtrlRead($checkclose) = 1 Then Exit
            Case $msg = $dfile
                $delcombo0 = GUICtrlRead($delcombo)
                $aDelcombo0 = StringSplit($delcombo0, ";")
                $kol = 0
                For $i = 1 To $aDelcombo0[0]
                    FileFindNextFirst($sTarget)
                    While 1
                        $tempname = FileFindNext()
                        If $tempname = "" Then ExitLoop
                        If StringRegExpReplace($tempname, '(?:^.*)\.(.*)$', '\1') = $aDelcombo0[$i] Then
                            ;MsgBox(0, "Сообщение", $tempname)
                            If GUICtrlRead($checkAtrb) = 1 Then FileSetAttrib($tempname, "-RASHT")
                            FileDelete($tempname)
                            $kol += 1
                        EndIf
                    WEnd
                Next
                ;MsgBox(0, "Сообщение", $kol)
                GUICtrlSetData($Labelkol, 'удалено ' & $kol)
                If GUICtrlRead($checkclose) = 1 Then Exit
            Case $msg = $checkclose
                If GUICtrlRead($checkclose) = 1 Then
                    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\script_az\contmenu", "close", "REG_SZ", "1")
                Else
                    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\script_az\contmenu", "close", "REG_SZ", "0")
                EndIf
            Case $msg = -3
                ExitLoop
        EndSelect
    WEnd
 
Else
    ; здесь для файлов.
    ; начало создания окна, вкладок, кнопок.
    GUICreate($aPath[1], 310, 105) ; размер окна
    $tab = GUICtrlCreateTab(0, 0, 310, 105) ; размер вкладки
 
    $checkclose = GUICtrlCreateCheckbox("Закрывать диалог при клике на кнопке", 10, 10, 290, 24)
    If $close = '1' Then GuiCtrlSetState(-1, 1)
 
    $comfile = GUICtrlCreateButton("Открыть ком-строку отсюда", 10, 40, 21, 21, 0x0040)
    GUICtrlSetTip(-1, "Открыть ком-строку отсюда" & @CRLF & "Для выполнения DOS-команд")
    GUICtrlSetImage(-1, @SystemDir & '\cmd.exe', 1, 0)
 
    $winrar = GUICtrlCreateButton("rar", 315, 40, 21, 21, 0x0040)
    GUICtrlSetTip(-1, "Упаковать с паролем" & @CRLF & "(указать в скрипте)")
    GUICtrlSetImage(-1, $WinRARPath, 1, 0)
    If FileExists($WinRARPath) Then GUICtrlSetPos($winrar, 85, 40)
 
    $Pathfull = GUICtrlCreateButton("", 35, 40, 21, 21, 0x0040)
    GUICtrlSetTip(-1, "Линк файла в буфер," & @CRLF & "полный путь и имя")
    GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', 2, 0)
    $assot = GUICtrlCreateButton("", 60, 40, 21, 21, 0x0040)
    GUICtrlSetTip(-1, "Открыть каталог" & @CRLF & "ассоциированной программы")
    GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', 4, 0)
 
    $cacls = GUICtrlCreateButton("Доступ", 10, 70, 90, 24)
    GUICtrlSetTip(-1, "Установить доступ к файлам")
    $accfncombo = GUICtrlCreateCombo("", 105, 70, 95, 24)
    GUICtrlSetData(-1, 'Все|Administrator|Admin|Администратор|System|Гость', 'Все')
    GUICtrlSetTip($accfncombo, "Пользователи и группы")
    $access = GUICtrlCreateCombo("", 210, 70, 90, 24)
    GUICtrlSetData(-1, 'запрет|чтение|запись|изменение|полный', 'полный')
    GUICtrlSetTip($access, "Тип доступа")
 
    $script = GUICtrlCreateButton("au3", 279, 40, 21, 21, 0x0040)
    GUICtrlSetTip(-1, "Редактировать скрипт" & @CRLF & "(пароль, пути)")
    GUICtrlSetImage(-1, $AutoIt3Path, 1, 0)
 
    GUICtrlCreateTabitem("") ; конец вкладок
 
    GUISetState()
 
    While 1
        $msg = GUIGetMsg()
        Select
            Case $msg = $script
                ShellExecute(@ScriptFullPath, '', '', "edit")
            Case $msg = $winrar
                 _winrar()
            Case $msg = $Pathfull
                ClipPut($sTarget)
                If GUICtrlRead($checkclose) = 1 Then Exit
                GUICtrlSetTip($Pathfull, "Полный путь и имя" & @CRLF & $sTarget)
            Case $msg = $cacls
                _cacls()
            Case $msg = $assot
                $type = StringRegExp($sTarget, "(^.*)\.(.*)$", 3)
                If @error = 1 Then ContinueLoop
                $astype = RegRead('HKEY_CLASSES_ROOT\.' & $type[1], "")
                $astype = RegRead('HKEY_CLASSES_ROOT\' & $astype & '\shell\open\command', "")
                If @error = 1 Then ContinueLoop
                $aPathexe = StringRegExp($astype, "(^.*)exe(.*)$", 3)
                If @error = 1 Then ContinueLoop
                $Pathexe1 = StringReplace($aPathexe[0], '"', '')
                If FileExists($Pathexe1 & 'exe') Then Run('Explorer.exe /select,"' & $Pathexe1 & 'exe"')
                If GUICtrlRead($checkclose) = 1 Then Exit
            Case $msg = $comfile
                $aPath = StringRegExp($sTarget, "(^.*)\\(.*)$", 3)
                ClipPut($aPath[1])
                Run(@SystemDir & '\cmd.exe /k cd "' & $aPath[0] & '"')
                WinWait("[CLASS:ConsoleWindowClass]")
                Send("!{SPACE}")
                Send("{DOWN 6}")
                Send("{ENTER}")
                Send("{DOWN 2}")
                Send("{ENTER}")
                If GUICtrlRead($checkclose) = 1 Then Exit
            Case $msg = $checkclose
                If GUICtrlRead($checkclose) = 1 Then
                    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\script_az\contmenu", "close", "REG_SZ", "1")
                Else
                    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\script_az\contmenu", "close", "REG_SZ", "0")
                EndIf
            Case $msg = -3
                ExitLoop
        EndSelect
    WEnd
 
EndIf
 
;$iMode <= 0 -> Folders + files
;$iMode = 1 -> Files only (first element still includes the initial path, wich is the $sPath)
;$iMode = 2 -> Folders only
Func _FileListToArrayEx($sPath, $sMask = "*", $iMode = 0, $iLevel = 0)
    If Not StringInStr(FileGetAttrib($sPath), "D") Then Return SetError(1, 0, 0)
 
    $sPath = StringRegExpReplace($sPath, "\\+$", "")
    $sMask = "(?i)" & StringReplace(StringReplace($sMask, ".", "\."), "*", ".*")
 
    StringReplace($sPath, "\", "")
    Local $iLevel_Slashes = @extended + 1
 
    Local $aPathesArr[2] = [1, $sPath]
    Local $hSearch, $sFindNext, $i, $iIsDir
 
    While $i < $aPathesArr[0]
        $i += 1
 
        $hSearch = FileFindFirstFile($aPathesArr[$i] & "\*")
        If $hSearch = -1 Then ContinueLoop
 
        While 1
            $sFindNext = FileFindNextFile($hSearch)
            If @error Then ExitLoop
 
            $iIsDir = StringInStr(FileGetAttrib($aPathesArr[$i] & "\" & $sFindNext), "D")
 
            If $iMode < 2 Or($iMode = 2 And $iIsDir) Then
                If Not $iIsDir And Not StringRegExp($sFindNext, $sMask) Then ContinueLoop
 
                $aPathesArr[0] += 1
                ReDim $aPathesArr[$aPathesArr[0] + 1]
 
                $aPathesArr[$aPathesArr[0]] = $aPathesArr[$i] & "\" & $sFindNext
            EndIf
        WEnd
 
        FileClose($hSearch)
 
        StringReplace($aPathesArr[$aPathesArr[0]], "\", "")
        If @extended - $iLevel_Slashes = $iLevel Then ExitLoop
    Wend
 
    If $iMode = 1 Then
        Local $aTmp_Arr = $aPathesArr
        Local $iTmp_Count = 1
 
        For $i = 2 To $aPathesArr[0]
            If StringInStr(FileGetAttrib($aPathesArr[$i]), "D") Then ContinueLoop
 
            $iTmp_Count += 1
            $aTmp_Arr[$iTmp_Count] = $aPathesArr[$i]
        Next
 
        $aTmp_Arr[0] = $iTmp_Count
        ReDim $aTmp_Arr[$iTmp_Count + 1]
 
        $aPathesArr = $aTmp_Arr
    EndIf
 
    Return $aPathesArr
EndFunc   ;==>_FileListToArrayEx
 
;=====================================================
Func FileFindNextFirst($FindCat)
    $Stack[0] = 1
    $Stack1[1] = $FindCat
    $Stack
[$Stack[0]] = FileFindFirstFile($Stack1[$Stack[0]] & "\*.*")
    Return $Stack[$Stack[0]]
EndFunc   ;==>FileFindNextFirst
 
Func FileFindNext()
    While 1
        $file = FileFindNextFile($Stack[$Stack[0]])
        If @error Then
            FileClose($Stack[$Stack[0]])
            If $Stack[0] = 1 Then
                Return
""
            Else
                $Stack[0] -= 1
                ContinueLoop
            EndIf
        Else
            If
StringInStr(FileGetAttrib($Stack1[$Stack[0]] & "\" & $file), "D") > 0 Then
                $Stack[0] += 1
                $Stack1[$Stack[0]] = $Stack1[$Stack[0] - 1] & "\" & $file
                $Stack
[$Stack[0]] = FileFindFirstFile($Stack1[$Stack[0]] & "\*.*")
                ContinueLoop
            Else
                Return
$Stack1[$Stack[0]] & "\" & $file
            EndIf
        EndIf
    WEnd
EndFunc
  ;==>FileFindNext
 
Func _cacls()
    $accfncombo0 = GUICtrlRead($accfncombo)
    $access00 = GUICtrlRead($access)
    Switch $access00
        Case $access00 = "запрет"
            $access0 = "N"
        Case $access00 = "чтение"
            $access0 = "R"
        Case $access00 = "запись"
            $access0 = "W"
        Case $access00 = "изменение"
            $access0 = "C"
        Case $access00 = "полный"
            $access0 = "F"
        Case Else
            $access0 = "F"
    EndSwitch
    ShellExecute(@SystemDir & '\cacls.exe', '"' & $sTarget & '" /t /e /p "' & $accfncombo0 & '":' & $access0, '', '', @SW_HIDE)
    If GUICtrlRead($checkclose) = 1 Then Exit
EndFunc
  ;==>_cacls
 
Func _subst()
    If FileExists("Y:\") Then
        GUICtrlSetPos($Virtcd2, 60, 40)
        GUICtrlSetPos($Virtcd1, 315, 40)
    Else
        GUICtrlSetPos($Virtcd1, 60, 40)
        GUICtrlSetPos($Virtcd2, 315, 40)
    EndIf
EndFunc
  ;==>_subst
 
Func _winrar()
; генерируем имя нового файла с номером копии на случай если файл существует
$i = 1
While FileExists($aPath[0]&'\'&$aPath[1]&$i&'.rar')
    $i +=1
WEnd
$filename=$aPath[0]&'\'&$aPath[1]&$i&'.rar'
If not FileExists($aPath[0]&'\'&$aPath[1]&'.rar') Then $filename=$aPath[0]&'\'&$aPath[1]&'.rar'
Run ( $WinRARPath&' a -hp"'&$password&'" -m5  "'&$filename&'" "'&$aPath[1]&'"', '', @SW_HIDE )
EndFunc   ;==>_winrar

Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 23:48 23-04-2010 | Исправлено: AZJIO, 00:38 24-04-2010
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Windows Preinstallation Environment(WinPE) и BartPE LiveCD 7
vu1tur (27-01-2012 03:24): следующая часть — http://forum.ru-board.com/topic.cgi?forum=62&topic=24098


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru