; @AZJIO $password='ru-board' ; указываем пароль для упаковки архивов ;$AutoIt3Path = @SystemDir & '\AutoIt3.exe'' $AutoIt3Path = @ProgramFilesDir&'\AutoIt3\AutoIt3.exe' $ScanPath = @ProgramFilesDir&'\Scanner\Scanner.exe' $WinRARPath = @ProgramFilesDir&'\WinRAR\WinRAR.exe' $7zipPath = @ProgramFilesDir&'\7-Zip\7z' ; файл 7z.exe специально указан без расширения, не путаться... #NoTrayIcon ;скрыть в системной панели индикатор AutoIt Global $Stack[50], $Stack1[50], $aFolder, $aPathexe[1] $close = RegRead("HKLM\SOFTWARE\script_az\contmenu", "close") If @error = 1 Then RegWrite("HKLM\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) $7zip = GUICtrlCreateButton("7z", 315, 40, 21, 21, 0x0040) GUICtrlSetTip(-1, "Упаковать с паролем" & @CRLF & "(указать в скрипте)") GUICtrlSetImage(-1, $7zipPath&'FM.exe', 1, 0) If FileExists($7zipPath&'.exe') Then GUICtrlSetPos($7zip, 110, 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) GUICtrlSetTip(-1, "Только для списка файлов") GUICtrlCreateLabel(" Тип:", 210, 72, 29, 17) $Typelist = GUICtrlCreateInput ("", 243, 70, 57, 20) GUICtrlSetTip(-1, "Список только для" & @CRLF & "указанных типов файлов") $Labelkol = GUICtrlCreateLabel("", 180, 40, 90, 20) ; количество удалённых GUICtrlSetTip(-1, 'Количество файлов'& @CRLF &'при нажатии "Удалить"') $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 = $7zip _7zip() Case $msg = $winrar _winrar() Case $msg = $Virtcd1 Run ( @Comspec&' /C subst y: "'&$sTarget&'"', '', @SW_HIDE ) Sleep(150) _subst() _cc() Case $msg = $Virtcd2 Run ( @Comspec&' /C subst y: /d', '', @SW_HIDE ) Sleep(150) _subst() _cc() Case $msg = $list $Typelist0=GUICtrlRead($Typelist) $mode0='' If $Typelist0<>'' Then $mode0=1 $Text = "" If GUICtrlRead($subfol) = 1 Then ; поиск в подпапках FileFindNextFirst($sTarget) While 1 $tempname = FileFindNext($Typelist0, $mode0) If $tempname = "" Then ExitLoop $Text &= $tempname & @CRLF WEnd If GUICtrlRead($listfull) = 4 Then $Text = StringRegExpReplace($Text, "(?:.*)\\(.*\r\n)", '\1') Else FileFindNextFirst($sTarget) ; поиск папок в корне While 1 $tempname = FileFindNext('',2,2) If $tempname = "" Then ExitLoop If GUICtrlRead($listfull) = 1 Then $Text &= $tempname & @CRLF Else $aPath = StringRegExp($tempname, "(^.*)\\(.*)$", 3) $Text &= $aPath[1] & @CRLF EndIf WEnd FileFindNextFirst($sTarget) While 1 $tempname = FileFindNext($Typelist0, $mode0,1) ; поиск файлов в корне If $tempname = "" Then ExitLoop If GUICtrlRead($listfull) = 1 Then $Text &= $tempname & @CRLF Else $aPath = StringRegExp($tempname, "(^.*)\\(.*)$", 3) $Text &= $aPath[1] & @CRLF EndIf WEnd 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') _cc() Case $msg = $cacls _cacls() Case $msg = $Scanner ShellExecute($ScanPath, '"' & $sTarget & '"', '', '', @SW_HIDE) _cc() Case $msg = $comstr Run(@SystemDir & '\cmd.exe /k cd "' & $sTarget & '"') _cc() Case $msg = $dfile $delcombo0 = GUICtrlRead($delcombo) $kol = 0 FileFindNextFirst($sTarget) While 1 $tempname = FileFindNext() If $tempname = "" Then ExitLoop If StringInStr(';'&$delcombo0&';', ';'&StringRegExpReplace($tempname, '(?:^.*)\.(.*)$', '\1')&';')>0 Then If GUICtrlRead($checkAtrb) = 1 Then FileSetAttrib($tempname, "-RASHT") FileDelete($tempname) $kol += 1 EndIf WEnd GUICtrlSetData($Labelkol, 'удалено ' & $kol) _cc() Case $msg = $checkclose _checkclose() Case $msg = -3 ExitLoop EndSelect WEnd Else ; здесь для файлов. ; начало создания окна, вкладок, кнопок. GUICreate($aPath[1], 310, 105) ; размер окна $tab = GUICtrlCreateTab(0, 0, 310, 105) ; размер вкладки $checkclose = GUICtrlCreateCheckbox("Закрывать диалог при клике на кнопке", 10, 10, 266, 24) If $close = '1' Then GuiCtrlSetState(-1, 1) $uninstall = GUICtrlCreateButton("unl", 280, 10, 21, 21, 0x0040) GUICtrlSetTip(-1, "Удалить регистрацию панельки в реестре" & @CRLF & "соответственно удаление из контекст. меню") GUICtrlSetImage(-1, @SystemDir & '\xpsp2res.dll', 1, 0) $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) $7zip = GUICtrlCreateButton("7z", 315, 40, 21, 21, 0x0040) GUICtrlSetTip(-1, "Упаковать с паролем" & @CRLF & "(указать в скрипте)") GUICtrlSetImage(-1, $7zipPath&'FM.exe', 1, 0) If FileExists($7zipPath&'.exe') Then GUICtrlSetPos($7zip, 110, 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 = $uninstall RegDelete("HKCR\*\shell\contmenu") RegDelete("HKCR\Folder\shell\contmenu") RegDelete("HKLM\SOFTWARE\script_az\contmenu") _cc() Case $msg = $script ShellExecute(@ScriptFullPath, '', '', "edit") Case $msg = $7zip _7zip() Case $msg = $winrar _winrar() Case $msg = $Pathfull ClipPut($sTarget) _cc() 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"') _cc() 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}") _cc() Case $msg = $checkclose _checkclose() Case $msg = -3 ExitLoop EndSelect WEnd EndIf ;===================================================== Func FileFindNextFirst($FindCat) $Stack[0] = 1 $Stack1[1] = $FindCat $Stack[1] = FileFindFirstFile($FindCat & "\*.*") Return $Stack[1] EndFunc ;==>FileFindNextFirst Func FileFindNext($type = 'log', $mode = 0, $Level=49) 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 If $Stack[0] = $Level Then ContinueLoop $Stack[0] += 1 $Stack1[$Stack[0]] = $Stack1[$Stack[0] - 1] & "\" & $file $Stack[$Stack[0]] = FileFindFirstFile($Stack1[$Stack[0]] & "\*.*") If $mode=2 Then Return $Stack1[$Stack[0]] Else ContinueLoop EndIf Else If $mode=2 Then ContinueLoop If $mode=1 Then If StringRight($Stack1[$Stack[0]] & "\" & $file, 4)<>'.'&$type Then ContinueLoop Else Return $Stack1[$Stack[0]] & "\" & $file EndIf Else Return $Stack1[$Stack[0]] & "\" & $file EndIf 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) _cc() 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 Func _7zip() ; генерируем имя нового файла с номером копии на случай если файл существует $i = 1 While FileExists($aPath[0]&'\'&$aPath[1]&$i&'.7z') $i +=1 WEnd $filename=$aPath[0]&'\'&$aPath[1]&$i&'.7z' If not FileExists($aPath[0]&'\'&$aPath[1]&'.7z') Then $filename=$aPath[0]&'\'&$aPath[1]&'.7z' Run ( $7zipPath&'.exe a "'&$filename&'" -p"'&$password&'" -mhe -mx9 "'&$aPath[1]&'"', '', @SW_HIDE ) EndFunc ;==>_7zip Func _cc() If GUICtrlRead($checkclose) = 1 Then Exit EndFunc ;==>_cc Func _checkclose() If GUICtrlRead($checkclose) = 1 Then RegWrite("HKLM\SOFTWARE\script_az\contmenu", "close", "REG_SZ", "1") Else RegWrite("HKLM\SOFTWARE\script_az\contmenu", "close", "REG_SZ", "0") EndIf EndFunc ;==>_checkclose |