Kar1son, Просто MsgBox(64, 'Title', |), вместо | интересующее значение. Я так понял.
» AutoIT
Kar1son 08:43 15-06-2010
Цитата:
Это аббревиатуры для SciTE. Вот здесь есть описание для русской сборки SciTE. Вобщем смысл в том, что вводиш, например, mb, нажимаеш пробел и из mb получается уже то, что было написано ранее - Msgbox(64,"Title",|), например. Курсор будет стоять в месте символа - |, что удобно. Аббревиатур может быть много, и каждая может иметь свой фрагмент нужного кода, который таким образом очень быстро можно вставить в нужное место SciTE. Вобщем, кто раз попробовал пользоваться - будет пользоваться всю жизнь.
Цитата:
а что это? mb в справке не нашел, а на | ругается как не допустимый символ...
Это аббревиатуры для SciTE. Вот здесь есть описание для русской сборки SciTE. Вобщем смысл в том, что вводиш, например, mb, нажимаеш пробел и из mb получается уже то, что было написано ранее - Msgbox(64,"Title",|), например. Курсор будет стоять в месте символа - |, что удобно. Аббревиатур может быть много, и каждая может иметь свой фрагмент нужного кода, который таким образом очень быстро можно вставить в нужное место SciTE. Вобщем, кто раз попробовал пользоваться - будет пользоваться всю жизнь.
Цитата:
Вот здесь есть описание для русской сборки SciTE.
Неплохо было бы добавить это в шапку... Странно что ещё нету ...
пример использования [more=GUICtrlCreateGraphic]
Цитата:
Цитата:
#include <GUIConstantsEx.au3>[/more], обновил 1 раз.
#include <StaticConstants.au3>
Global $Stack[50], $Stack1[50], $a, $BL, $List=''
GUICreate("Графический просмотр каталога", 380, 410, -1, -1, -1, 0x00000010)
$StatusBar = GUICtrlCreateLabel('Строка состояния AZJIO 2010.06.16', 5, 410 - 20, 370, 20, $SS_LEFTNOWORDWRAP)
$CatchDrop = GUICtrlCreateLabel(" кинь сюда каталог", 0, 0, 380, 17, $SS_SUNKEN)
GUICtrlSetState(-1, 8)
$CatchDrop1 = GUICtrlCreateLabel("", 0, 20, 380, 360)
GUICtrlSetState(-1, 136)
$BL=GUICtrlCreateButton ("L", 360 ,24,18,18)
GUISetState()
While 1
$msg = GUIGetMsg()
Select
Case $msg = -13
If StringInStr(FileGetAttrib(@GUI_DragFile), "D") = 0 Then
MsgBox(0, "Мелкая ошибка", 'Перетаскивайте каталог, а не файл.')
ContinueLoop
Else
GUICtrlDelete($CatchDrop1)
;GUICtrlDelete($BL)
GUICtrlDelete($a)
_Create()
EndIf
Case $msg = $BL
MsgBox(0, 'Список файлов', $List)
Case $msg = -3
Exit
EndSelect
WEnd
Func _Create()
GUICtrlSetData($CatchDrop, @GUI_DragFile)
$a = GUICtrlCreateGraphic(10, 20, 360, 360)
GUICtrlSetState(-1, 8)
;подсчёт общего размера файлов
FileFindNextFirst(@GUI_DragFile)
$Size4=DirGetSize(@GUI_DragFile,2)
$size4 = $Size4 / 360
$Size = 0
While 1
$tempname = FileFindNext('', 0, 1)
If $tempname = "" Then ExitLoop
$Size5= FileGetSize($tempname)
If $Size5<$size4 Then ContinueLoop
$k=Floor($Size5/$size4)
;$Size5=$size4*$k
$Size += $size4*$k
WEnd
$size2 = $Size / 360 ; количество байт приходящихся на один градус
;создание графика
$nach = 0
$kol000 = 0
$List=''
FileFindNextFirst(@GUI_DragFile)
While 1
$tempname = FileFindNext('', 0, 1)
If $tempname = "" Then ExitLoop
$Size5= FileGetSize($tempname)
If $Size5<$size2 Then ContinueLoop
$k=$Size5/$size4
$grad = Floor($Size5/$size2) ; угол файла (ширина сектора)
GUICtrlSetGraphic($a, $GUI_GR_COLOR, 0, Dec(Random(50, 99, 1) & Random(50, 99, 1) & Random(50, 99, 1))) ; цвет сектора
GUICtrlSetGraphic($a, $GUI_GR_PIE, 180, 180, 180, $nach, $grad) ; создание сектора
$kol000 += 1
; If $kol000<7 Then
; GUICtrlCreateLabel($kol000, (90+$kol000*14)*cos($nach)+190, (90+$kol000*14)*sin($nach)+200, 10, 14)
; GUICtrlSetTip(-1, $tempname)
; EndIf
$nach += $grad ; начальный угол отсчёта (смещение, сдвиг)
$List&=$kol000&') '&StringRegExpReplace($tempname, '(^.*)\\(.*)$', '\2')&@CRLF
WEnd
GUICtrlSetGraphic($a, $GUI_GR_REFRESH)
GUICtrlSetData($StatusBar, 'Размер ' & Ceiling($Size / 1024 / 1024) & ' Мб колич ' & $kol000 & ' путь ' & @GUI_DragFile)
GUICtrlSetTip($CatchDrop,$List)
EndFunc ;==>_Create
;========================================
; функция поиска всех файлов в каталоге (NIKZZZZ+мод_AZJIO)
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 StringInStr(';' & $type & ';', ';' & StringRight($Stack1[$Stack[0]] & "\" & $file, 3) & ';') = 0 Then
ContinueLoop
Else
Return $Stack1[$Stack[0]] & "\" & $file
EndIf
Else
Return $Stack1[$Stack[0]] & "\" & $file
EndIf
EndIf
EndIf
WEnd
EndFunc ;==>FileFindNext
Тложно объяснить словами, поэтому скриншот. Ищу красный цвет поочереди на всем поле(на скрине виден один квадрат, на самом деле их тут 6 на 6, просто на одном отрабатываю пока), поиск идет по каждому квадратику, на скрине поиск по квадрату ПОД тем на котором есть совпадение. Маленькая кнопочка показывает где проверка нашла совпадение по цвету, но видно же что его там нет! кусок проги которая это делает виден на скрине. если проверяемый квадрат начинается ниже предыдущего на 17 точек то все норм, если меньше то будет совпадение, причем в разных точках(если ниже на 1 пиксель то в одной, если на 2 пикселя то в другой). Чертовщина какая-то...
хотябы в каком направлении копать?
Kar1son
Скачал Вашу картинку, поместил ее в окно, посмотрел цвет AutoIt v3 Window Info.
У меня так все работает:
Код: #include <GUIConstantsEx.au3>
Opt("MouseCoordMode", 2)
Opt("PixelCoordMode", 2)
$Form1 = GUICreate("Form1", 650, 450, -1, -1)
$Pic1 = GUICtrlCreatePic("1.jpg", 80, 104, 60, 60)
$Button = GUICtrlCreateButton("Button", 500, 400,80, 30)
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button
$cord = PixelSearch( 0, 0, 650, 450, 0xF70B17, -1, 0, $Form1)
If Not @error Then
MouseMove($cord[0], $cord[1], 20)
Else
MsgBox(0, '', "Нет такого цвета")
EndIf
EndSwitch
WEnd
Скачал Вашу картинку, поместил ее в окно, посмотрел цвет AutoIt v3 Window Info.
У меня так все работает:
Код: #include <GUIConstantsEx.au3>
Opt("MouseCoordMode", 2)
Opt("PixelCoordMode", 2)
$Form1 = GUICreate("Form1", 650, 450, -1, -1)
$Pic1 = GUICtrlCreatePic("1.jpg", 80, 104, 60, 60)
$Button = GUICtrlCreateButton("Button", 500, 400,80, 30)
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button
$cord = PixelSearch( 0, 0, 650, 450, 0xF70B17, -1, 0, $Form1)
If Not @error Then
MouseMove($cord[0], $cord[1], 20)
Else
MsgBox(0, '', "Нет такого цвета")
EndIf
EndSwitch
WEnd
madmasles
оно и у меня так работает, но после того как находит точку(как в вашем примере), находит еще одну(левую)... вот как оно работает, если не сложно, посмотрте пожалуйста. Спасибо!
_http://ifolder.ru/18197786
оно и у меня так работает, но после того как находит точку(как в вашем примере), находит еще одну(левую)... вот как оно работает, если не сложно, посмотрте пожалуйста. Спасибо!
_http://ifolder.ru/18197786
Kar1son
Я поменял в Вашем скрипте (_http://ifolder.ru/18197786) Opt("PixelCoordMode", 0) на Opt("PixelCoordMode", 2) и кнопки создаются только там, где найден цвет, а лишние кнопки у меня не создаются.
Я поменял в Вашем скрипте (_http://ifolder.ru/18197786) Opt("PixelCoordMode", 0) на Opt("PixelCoordMode", 2) и кнопки создаются только там, где найден цвет, а лишние кнопки у меня не создаются.
madmasles
я кажется понял.я промахнулся с координатами квадратов, и плюс к этому PixelSearch давал координаты от угла окна, а GUICtrlCreateButton координаты от клиентского окна... Спасибо что помогли разобраться!
я кажется понял.я промахнулся с координатами квадратов, и плюс к этому PixelSearch давал координаты от угла окна, а GUICtrlCreateButton координаты от клиентского окна... Спасибо что помогли разобраться!
XpycTMD
Цитата:
Попробуй заменить
Код: #include <Array.au3>
$strIPAddress = _ArrayCreate("192.168.0.141")
Цитата:
degid
Цитата: Ура!!! Оказывается существует файл Array.au3! там есть _ArrayCreate.
Попробуй заменить
Код: #include <Array.au3>
$strIPAddress = _ArrayCreate("192.168.0.141")
Никто незнает способа, как получить права доступа пользователя к файлу-папке?
(которые в свойствах файла на вкладке Безопасность..)
(которые в свойствах файла на вкладке Безопасность..)
Orion_76
у меня примерно так:
Цитата:
$sTarget - путь
$accfncombo0 - пользователь (Administrator, Все)
$access0 - буква, к примеру F - полный доступ.
Или посмотри полный [more=пример для контекстного меню]
Код: ; @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
у меня примерно так:
Цитата:
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)
EndFunc ;==>_cacls
$sTarget - путь
$accfncombo0 - пользователь (Administrator, Все)
$access0 - буква, к примеру F - полный доступ.
Или посмотри полный [more=пример для контекстного меню]
Код: ; @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
AZJIO
Наверное я не корректно поставил вопрос...-))
В скрипте , перед операцией с файлом (копирование, перемещение, запись, чтение), хотелось бы проверить права текущего пользователя на эти операции.
Что-бы потом не удивляться, почему операция не удалась..-)))
Надо просто функцию, которая возвратила бы TRUE, если опрерация с файлом доступна пользователю, от имени которого выполняется скрипт.
Наверное я не корректно поставил вопрос...-))
В скрипте , перед операцией с файлом (копирование, перемещение, запись, чтение), хотелось бы проверить права текущего пользователя на эти операции.
Что-бы потом не удивляться, почему операция не удалась..-)))
Надо просто функцию, которая возвратила бы TRUE, если опрерация с файлом доступна пользователю, от имени которого выполняется скрипт.
Может кому-то будет интересен один из кирпичиков полной автоматизации развертывания системы из образа. Знаюи что тема давно раскрыта, однако методы/способы/требования у меня свои, следовательно и инструменты тоже. Решения этого вопроса не нашел, поэтому набросал сам. В процессе написания использовал DeviceAPI.au3. Проверено на двух системах.
Цитата:
Цитата:
#include "DeviceAPI.au3"
;Смысл программы в том, чтобы закрывая окна Мастера Нового Оборудования,
; она считала количество таких закрытых окон и сравнивала это кол-во
; с текущим количеством неизвестных устройств, а когда кол-во последних
; будет равно количеству закрытых окон (система установит все что может
; установить), мы запустим установку неизвестных устройств.
;
;Можно конечно из окна Мастера нового оборудования из WindowText брать
; наименование конкретного неизвестного устройства, затем находить его в
; текущем массиве и выбивать из "обоймы", но это уже лишнее, хотя и точнее.
$wcount = 0
;Перебирая окна, закрываем паразитные и ведем статистику
Do
$var = WinList()
For $i = 1 to $var[0][0]
If $var[$i][0] <> "" AND BitAnd( WinGetState($var[$i][1]), 2 ) Then
Select
Case $var[$i][0] = "Изменение параметров системы"
WinClose("Изменение параметров системы")
Case $var[$i][0] = "Мастер нового оборудования"
WinClose("Мастер нового оборудования")
$wcount+=1
EndSelect
EndIf
Next
Until $wcount=GetCurrentUnknownDevicesCount()
;Если все сходится, то завершаем работу
MsgBox(64,"","Неизвестных устройств: " & $wcount)
;=======================================================================
; Функция подсчета неизвестных устройств в данный момент
;=======================================================================
Func GetCurrentUnknownDevicesCount()
$i=0
;Строим список классов устройств
_DeviceAPI_GetAllDevices()
;Просматривая устройства, считаем количество устройств с пустымы класом и идентификатором
While _DeviceAPI_EnumDevices()
$classname = _DeviceAPI_GetClassName(_DeviceAPI_GetDeviceRegistryProperty($SPDRP_CLASSGUID))
$classGUID = _DeviceAPI_GetDeviceRegistryProperty($SPDRP_CLASSGUID)
If $classname="" AND $classGUID="" Then $i+=1
WEnd
;Очищаем за собой
_DeviceAPI_DestroyDeviceInfoList()
Return $i
EndFunc
Вот вроде нашел что надо,
ТОлько не пойму, что она возвращает..
Код: Func _GetFileSecurityDACL($sFile)
If Not IsDeclared("DACL_SECURITY_INFORMATION") Then Const $DACL_SECURITY_INFORMATION = 0x4
Local $return
Local $hAdvapi32 = DllOpen("advapi32.dll")
If Not FileExists($sFile) Then Return SetError(1,0,0)
$return = DllCall($hAdvapi32,"long","GetFileSecurity", _
"str",$sFile, _
"dword", $DACL_SECURITY_INFORMATION, _
"ptr",0, _
"dword",0, _
"dword*",0)
If Not $return[5] Then Return SetError(1,0,0)
Local $strucSD = DllStructCreate("byte[" & $return[5] & "]")
$return = DllCall($hAdvapi32,"long","GetFileSecurity", _
"str",$sFile, _
"dword", $DACL_SECURITY_INFORMATION, _
"ptr",DllStructGetPtr($strucSD), _
"dword",DllStructGetSize($strucSD), _
"dword*",0)
If Not $return[0] Then Return SetError(1,0,0)
DllClose($hAdvapi32)
Return DllStructGetData($strucSD,1)
EndFunc
ТОлько не пойму, что она возвращает..
Код: Func _GetFileSecurityDACL($sFile)
If Not IsDeclared("DACL_SECURITY_INFORMATION") Then Const $DACL_SECURITY_INFORMATION = 0x4
Local $return
Local $hAdvapi32 = DllOpen("advapi32.dll")
If Not FileExists($sFile) Then Return SetError(1,0,0)
$return = DllCall($hAdvapi32,"long","GetFileSecurity", _
"str",$sFile, _
"dword", $DACL_SECURITY_INFORMATION, _
"ptr",0, _
"dword",0, _
"dword*",0)
If Not $return[5] Then Return SetError(1,0,0)
Local $strucSD = DllStructCreate("byte[" & $return[5] & "]")
$return = DllCall($hAdvapi32,"long","GetFileSecurity", _
"str",$sFile, _
"dword", $DACL_SECURITY_INFORMATION, _
"ptr",DllStructGetPtr($strucSD), _
"dword",DllStructGetSize($strucSD), _
"dword*",0)
If Not $return[0] Then Return SetError(1,0,0)
DllClose($hAdvapi32)
Return DllStructGetData($strucSD,1)
EndFunc
Orion_76
так то что написал AZJIO как раз подходит
так то что написал AZJIO как раз подходит
Kar1son
Код:
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)
EndFunc ;==>_cacls
Код:
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)
EndFunc ;==>_cacls
Цитата:
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 $access0 = "C" then
return True
else
return False
endif
EndFunc ;==>_cacls
а голова на что? принцип полностью показан, тут три строки дописать
Kar1son
Цитата:
Прочтите внимательней код..
$access0 - читается из ГУЯ
Эта функция для УСТАНОВКИ разрешений
А надо для ПРОВЕРКИ
т.е что-то типа:
$res=ФункцияПроверкиРазрешений($ИмяФайла,$ИмяПользователя)
If $res==1 Then
...
else
...
EnfIF
В принципе вроде нужную функцию нашел(в посте выше-Func _GetFileSecurityDACL($sFile)
)
Она возвращает какой-то секъюрити дескриптор (в WinApi не силен), т.е. шестнадцатиричную строку.
Осталось только догадаться, как из него нужную инфу выдернуть.
Цитата:
а голова на что? принцип полностью показан, тут три строки дописать
Прочтите внимательней код..
$access0 - читается из ГУЯ
Эта функция для УСТАНОВКИ разрешений
А надо для ПРОВЕРКИ
т.е что-то типа:
$res=ФункцияПроверкиРазрешений($ИмяФайла,$ИмяПользователя)
If $res==1 Then
...
else
...
EnfIF
В принципе вроде нужную функцию нашел(в посте выше-Func _GetFileSecurityDACL($sFile)
)
Она возвращает какой-то секъюрити дескриптор (в WinApi не силен), т.е. шестнадцатиричную строку.
Осталось только догадаться, как из него нужную инфу выдернуть.
Orion_76 ладно убедил слепой дятел это все таки я
Решил занятся [more=переводом]1. Для частичной автоматизации сделал замену строк по всем файлам справки:
Цитата:
Перевожу функции _WinAPI_*****
Пока перевёл 8 функций
Цитата:
Для компиляции использую htm2chm
[/more] справки UDF - UDFs3.chm
Цитата:
<p><b>Return Value</b></p> на <p><b>Возвращаемое значение</b></p>
<td width="10%" valign="top">Success:</td> на <td width="10%" valign="top">Успешно:</td>
<td valign="top">Failure:</td> на <td valign="top">Неудачно:</td>
<p><b>Remarks</b></p> на <p><b>Примечание</b></p>
<p><b>Related</b></p> на <p><b>Связана с функцией</b></p>
<p><b>Example</b></p> на <p><b>Пример</b></p>
value="Text:Open this Script"> на value="Text:Открыть">
<h1>Function Reference</h1> на <h1>Функция</h1>
<p><b>Parameters</b></p> на <p><b>Параметры</b></p>
<b>[optional]</b> на <b>[опционально]</b>
<p><b>See Also</b></p> на <p><b>Также смотреть</b></p>
Search <a href=" на Найти <a href="
</a> in MSDN Library на </a> в библиотеке MSDN
<td>set @error</td> на <td>установить @error</td>
</b></p>
None.<br>
на
</b></p>
нет.<br>
Перевожу функции _WinAPI_*****
Пока перевёл 8 функций
Цитата:
_WinAPI_Beep.htm
_WinAPI_CreateFile.htm
_WinAPI_EnableWindow.htm
_WinAPI_GetFileSizeEx.htm
_WinAPI_GetFocus.htm
_WinAPI_GetMousePos.htm
_WinAPI_GetMousePosX.htm
_WinAPI_GetMousePosY.htm
Для компиляции использую htm2chm
[/more] справки UDF - UDFs3.chm
Orion_76 11:45 21-06-2010
Цитата:
Код: Func _CheckSecurityDescriptor($Descriptor)
Local $strucSD = DllStructCreate("byte[" & (StringLen($Descriptor)/2)-1 & "]")
DllStructSetData($strucSD,1,$Descriptor)
Local $hAdvapi32 = DllOpen("advapi32.dll")
Local $return = DllCall($hAdvapi32,"int","IsValidSecurityDescriptor", _
"ptr",DllStructGetPtr($strucSD))
DllClose($hAdvapi32)
If $return[0] = 0 Then Return SetError(1,0,0)
Return 1
EndFunc
Цитата:
Она возвращает какой-то секъюрити дескриптор (в WinApi не силен), т.е. шестнадцатиричную строку.
Осталось только догадаться, как из него нужную инфу выдернуть.
Код: Func _CheckSecurityDescriptor($Descriptor)
Local $strucSD = DllStructCreate("byte[" & (StringLen($Descriptor)/2)-1 & "]")
DllStructSetData($strucSD,1,$Descriptor)
Local $hAdvapi32 = DllOpen("advapi32.dll")
Local $return = DllCall($hAdvapi32,"int","IsValidSecurityDescriptor", _
"ptr",DllStructGetPtr($strucSD))
DllClose($hAdvapi32)
If $return[0] = 0 Then Return SetError(1,0,0)
Return 1
EndFunc
vicbox777
Цитата:
Вроде просто определяет валидность структуры дескриптора?
Цитата:
IsValidSecurityDescriptor
Вроде просто определяет валидность структуры дескриптора?
Цитата:
Вроде просто определяет валидность структуры дескриптора?
Извиняюсь.
vicbox777
Бывает-))
Блин...весь инет перерыл...
Неужели это не актуально....?
Есть примеры на С и на VB...
но там кода строк на 150...
Можно конечно вывод cacls распарсить...или WMI
Но это ненадежно или через Ж...
Бывает-))
Блин...весь инет перерыл...
Неужели это не актуально....?
Есть примеры на С и на VB...
но там кода строк на 150...
Можно конечно вывод cacls распарсить...или WMI
Но это ненадежно или через Ж...
Как этот же скрипт можно написать лучше (в самом прямом смысле)?
Код: HotKeySet("{numpaddot}", "Terminate")
HotKeySet("{numpad1}", "LeftToggle")
HotKeySet("{numpad3}", "RightToggle")
Global $StartLeft
Global $StartRight
While 1=1
While $StartLeft = True
Left()
WEnd
While $StartRight = True
Right()
WEnd
Sleep(10)
WEnd
Func Right()
Send("{left down}")
Sleep(150)
Send("{left up}")
Send("{right down}")
Sleep(600)
Send("{right up}")
Send("{up down}")
Sleep(50)
Send("{up up}")
Sleep(50)
EndFunc
Func Left()
Send("{right down}")
Sleep(150)
Send("{right up}")
Send("{left down}")
Sleep(600)
Send("{left up}")
Send("{up down}")
Sleep(50)
Send("{up up}")
Sleep(50)
EndFunc
Func LeftToggle()
$StartLeft = NOT $StartLeft
EndFunc
Func RightToggle()
$StartRight = Not $StartRight
EndFunc
Func Terminate()
Exit 0
EndFunc
Код: HotKeySet("{numpaddot}", "Terminate")
HotKeySet("{numpad1}", "LeftToggle")
HotKeySet("{numpad3}", "RightToggle")
Global $StartLeft
Global $StartRight
While 1=1
While $StartLeft = True
Left()
WEnd
While $StartRight = True
Right()
WEnd
Sleep(10)
WEnd
Func Right()
Send("{left down}")
Sleep(150)
Send("{left up}")
Send("{right down}")
Sleep(600)
Send("{right up}")
Send("{up down}")
Sleep(50)
Send("{up up}")
Sleep(50)
EndFunc
Func Left()
Send("{right down}")
Sleep(150)
Send("{right up}")
Send("{left down}")
Sleep(600)
Send("{left up}")
Send("{up down}")
Sleep(50)
Send("{up up}")
Sleep(50)
EndFunc
Func LeftToggle()
$StartLeft = NOT $StartLeft
EndFunc
Func RightToggle()
$StartRight = Not $StartRight
EndFunc
Func Terminate()
Exit 0
EndFunc
Цитата:
Kar1son
Цитата: а голова на что? принцип полностью показан, тут три строки дописать
Прочтите внимательней код..
$access0 - читается из ГУЯ
Эта функция для УСТАНОВКИ разрешений
А надо для ПРОВЕРКИ
сделал скрипт(ехе) задача которого нажимать кнопки в окне приложения, и выбирать в списке(по типу списка диспетчера задач) указанные строки, сохранять инфу из окна в файл
что делать при запуск определяется параметрами запуска
сам запуск этого скрипта(ехе) производится через веб-панель т.е. через PHP exec
на локальной системе, где и апач и приложение запущены от одного юзера все работает без проблем
на системе где апач запущен от SYSTEM, а приложение от моего юзера, этот скрипт(ехе) запускается, но не выдает инфы видимо из-за того что он запускается от имени SYSTEM и просто не видит окно приложения
сделал еще один скрипт(ехе), который запускает первый от того же юзера, от которого запущено приложение
судя по диспетчеру задач он действительно стал запускаться от того же юзера что и приложение, но взять инфу из окна, или нажать кнопку так и не смог
п.с. сделал тоже самое, только вместо своего скрипта подставил calc.exe
в диспетчере задач calc.exe появился от моего имени, но самого окна на рабочем столе не появилось, может в этом проблема
хотя в моем скрипте(ехе) нет гуи
что делать при запуск определяется параметрами запуска
сам запуск этого скрипта(ехе) производится через веб-панель т.е. через PHP exec
на локальной системе, где и апач и приложение запущены от одного юзера все работает без проблем
на системе где апач запущен от SYSTEM, а приложение от моего юзера, этот скрипт(ехе) запускается, но не выдает инфы видимо из-за того что он запускается от имени SYSTEM и просто не видит окно приложения
сделал еще один скрипт(ехе), который запускает первый от того же юзера, от которого запущено приложение
судя по диспетчеру задач он действительно стал запускаться от того же юзера что и приложение, но взять инфу из окна, или нажать кнопку так и не смог
п.с. сделал тоже самое, только вместо своего скрипта подставил calc.exe
в диспетчере задач calc.exe появился от моего имени, но самого окна на рабочем столе не появилось, может в этом проблема
хотя в моем скрипте(ехе) нет гуи
degid
а почему XCACLS? Я попробовал cacls, который уже есть в системе, с ним тоже выдаёт инфу, вот тест:
Цитата:
ringer
А можно пример, хотя бы того же диспетчера задач, чтоб пытался нажать на нём кнопки, я бы у себя проверил.
А почему не видно ожидание активного окна? Ведь скрипт явно не успеет его открыть, как все клики уже отработают...
а почему XCACLS? Я попробовал cacls, который уже есть в системе, с ним тоже выдаёт инфу, вот тест:
Цитата:
cacls C:\WINDOWSс консоли прочитать и отдетектить регулярным выражением вроде не проблема.
PAUSE
ringer
А можно пример, хотя бы того же диспетчера задач, чтоб пытался нажать на нём кнопки, я бы у себя проверил.
А почему не видно ожидание активного окна? Ведь скрипт явно не успеет его открыть, как все клики уже отработают...
пробовал запускать скрипт вручную - т.е. даблклик по ехе шнику
проблем с не успеванием не было
проблем с не успеванием не было
Предыдущая тема: Проблемы с VMware Workstation (часть 4)
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.