#NoTrayIcon ;скрыть в системной панели индикатор AutoIt Global $aFolder Global $aPathexe[1] $ScanPath='X:\PROGRAMS\Scanner\SCANNER.EXE' $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' EndIf $sTarget = StringTrimLeft($CmdLineRaw, StringLen('"'&@ScriptFullPath&'" ')) If $sTarget='' Then Exit $aPath=StringRegExp($sTarget, "(^.*)\\(.*)$", 3) ; если каталог, тогда ... иначе ... If StringInStr(FileGetAttrib($sTarget), 'D') Then ; начало создания окна, вкладок, кнопок. GUICreate($aPath[1],310,225) ; размер окна GUICtrlCreateTab (0,0, 310,225) ; размер вкладки $checkclose=GUICtrlCreateCheckbox ("Закрывать диалог при клике на кнопке", 10,10,290,24) If $close = '1' Then GuiCtrlSetState(-1, 1) $comstr=GUICtrlCreateButton ("Открыть ком-строку отсюда", 10,40,290,24) GUICtrlSetTip(-1, "Для выполнения DOS-команд") $list=GUICtrlCreateButton ("Создать список всех файлов и папок, только имена", 10,70,290,24) GUICtrlSetTip(-1, "Без подкаталогов") $listfull=GUICtrlCreateButton ("Создать список всех файлов и папок, полный путь", 10,100,290,24) GUICtrlSetTip(-1, "Без подкаталогов") $cacls=GUICtrlCreateButton ("Доступ", 10,130,90,24) GUICtrlSetTip(-1, "Можно дать доступ к папке"&@CRLF&"System Volume Information") $accfncombo=GUICtrlCreateCombo ("", 105,130,95,24) GUICtrlSetData(-1,'Все|Administrator|Admin|Администратор|System|Гость', 'Все') GUICtrlSetTip($accfncombo, "Пользователи и группы") $access=GUICtrlCreateCombo ("", 210,130,90,24) GUICtrlSetData(-1,'запрет|чтение|запись|изменение|полный', 'полный') GUICtrlSetTip($access, "Тип доступа") $dfile=GUICtrlCreateButton ("Удалить тип файлов", 10,160,130,24) $delcombo=GUICtrlCreateCombo ("", 145,160,55,24) GUICtrlSetData(-1,'bak|gid|log|tmp', 'bak') $checkAtrb=GUICtrlCreateCheckbox ("Снять атрибут", 210,160,90,24) GuiCtrlSetState(-1, 1) GUICtrlSetTip($checkAtrb, "Снимать атрибуты файла"&@CRLF&"для возможности его удалить") $Scanner=GUICtrlCreateButton ("Открыть в Scanner", 10,190,290,24) GUICtrlSetTip(-1, "Для просмотра занимаемого"&@CRLF&"пространтсва на харде") GUICtrlCreateTabitem ("") ; конец вкладок GUISetState () While 1 $msg = GUIGetMsg() Select Case $msg = $list $aFolder = _FileListToArrayEx($sTarget, "", 0, 0) $Text = "" For $i=2 To $aFolder[0] $aPath=StringRegExp($aFolder[$i], "(^.*)\\(.*)$", 3) $Text &= $aPath[1] & @CRLF Next 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 = $listfull $aFolder = _FileListToArrayEx($sTarget, "", 0, 0) $Text = "" For $i=2 To $aFolder[0] $Text &= $aFolder[$i] & @CRLF Next 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 $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 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) $aFolder = _FileListToArrayEx($sTarget, $delcombo0, 0, 10) For $i=2 To $aFolder[0] If StringInStr(FileGetAttrib($aFolder[$i]), 'D') Then ContinueLoop Else If GUICtrlRead ($checkAtrb) = 1 Then FileSetAttrib($aFolder[$i], "-RASHT") FileDelete($aFolder[$i]) EndIf Next 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,165) ; размер окна $tab=GUICtrlCreateTab (0,0, 310,165) ; размер вкладки $checkclose=GUICtrlCreateCheckbox ("Закрывать диалог при клике на кнопке", 10,10,290,24) If $close = '1' Then GuiCtrlSetState(-1, 1) $comfile=GUICtrlCreateButton ("Открыть ком-строку отсюда", 10,40,290,24) GUICtrlSetTip(-1, "Для выполнения DOS-команд") $Pathfull=GUICtrlCreateButton ("Линк файла в буфер", 10,70,290,24) GUICtrlSetTip(-1, "Полный путь и имя") $assot=GUICtrlCreateButton ("Открыть каталог ассоциированной программы", 10,100,290,24) $cacls=GUICtrlCreateButton ("Доступ", 10,130,90,24) GUICtrlSetTip(-1, "Установить доступ к файлам") $accfncombo=GUICtrlCreateCombo ("", 105,130,95,24) GUICtrlSetData(-1,'Все|Administrator|Admin|Администратор|System|Гость', 'Все') GUICtrlSetTip($accfncombo, "Пользователи и группы") $access=GUICtrlCreateCombo ("", 210,130,90,24) GUICtrlSetData(-1,'запрет|чтение|запись|изменение|полный', 'полный') GUICtrlSetTip($access, "Тип доступа") GUICtrlCreateTabitem ("") ; конец вкладок GUISetState () While 1 $msg = GUIGetMsg() Select Case $msg = $Pathfull ClipPut($sTarget) If GUICtrlRead ($checkclose) = 1 Then Exit Case $msg = $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 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 |