Ru-Board.club
← Вернуться в раздел «Программы»

» AutoIT

Автор: Cegpuk
Дата сообщения: 15.06.2010 12:49
Kar1son, Просто MsgBox(64, 'Title', |), вместо | интересующее значение. Я так понял.
Автор: vicbox777
Дата сообщения: 15.06.2010 16:07
Kar1son 08:43 15-06-2010
Цитата:
а что это? mb в справке не нашел, а на | ругается как не допустимый символ...

Это аббревиатуры для SciTE. Вот здесь есть описание для русской сборки SciTE. Вобщем смысл в том, что вводиш, например, mb, нажимаеш пробел и из mb получается уже то, что было написано ранее - Msgbox(64,"Title",|), например. Курсор будет стоять в месте символа - |, что удобно. Аббревиатур может быть много, и каждая может иметь свой фрагмент нужного кода, который таким образом очень быстро можно вставить в нужное место SciTE. Вобщем, кто раз попробовал пользоваться - будет пользоваться всю жизнь.
Автор: kosjachok
Дата сообщения: 15.06.2010 23:25

Цитата:
Вот здесь есть описание для русской сборки SciTE.

Неплохо было бы добавить это в шапку... Странно что ещё нету ...
Автор: AZJIO
Дата сообщения: 16.06.2010 03:36
пример использования [more=GUICtrlCreateGraphic]
Цитата:
#include <GUIConstantsEx.au3>
#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
[/more], обновил 1 раз.
Автор: Kar1son
Дата сообщения: 16.06.2010 14:25

Тложно объяснить словами, поэтому скриншот. Ищу красный цвет поочереди на всем поле(на скрине виден один квадрат, на самом деле их тут 6 на 6, просто на одном отрабатываю пока), поиск идет по каждому квадратику, на скрине поиск по квадрату ПОД тем на котором есть совпадение. Маленькая кнопочка показывает где проверка нашла совпадение по цвету, но видно же что его там нет! кусок проги которая это делает виден на скрине. если проверяемый квадрат начинается ниже предыдущего на 17 точек то все норм, если меньше то будет совпадение, причем в разных точках(если ниже на 1 пиксель то в одной, если на 2 пикселя то в другой). Чертовщина какая-то...
хотябы в каком направлении копать?
Автор: madmasles
Дата сообщения: 16.06.2010 21:07
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
Автор: Kar1son
Дата сообщения: 17.06.2010 08:16
madmasles
оно и у меня так работает, но после того как находит точку(как в вашем примере), находит еще одну(левую)... вот как оно работает, если не сложно, посмотрте пожалуйста. Спасибо!
_http://ifolder.ru/18197786
Автор: madmasles
Дата сообщения: 17.06.2010 09:14
Kar1son
Я поменял в Вашем скрипте (_http://ifolder.ru/18197786) Opt("PixelCoordMode", 0) на Opt("PixelCoordMode", 2) и кнопки создаются только там, где найден цвет, а лишние кнопки у меня не создаются.
Автор: Kar1son
Дата сообщения: 17.06.2010 09:35
madmasles
я кажется понял.я промахнулся с координатами квадратов, и плюс к этому PixelSearch давал координаты от угла окна, а GUICtrlCreateButton координаты от клиентского окна... Спасибо что помогли разобраться!
Автор: degid
Дата сообщения: 17.06.2010 14:28
XpycTMD
Цитата:
degid
Цитата: Ура!!! Оказывается существует файл Array.au3! там есть _ArrayCreate.

Попробуй заменить
Код: #include <Array.au3>
$strIPAddress = _ArrayCreate("192.168.0.141")
Автор: Orion_76
Дата сообщения: 19.06.2010 23:12
Никто незнает способа, как получить права доступа пользователя к файлу-папке?
(которые в свойствах файла на вкладке Безопасность..)
Автор: AZJIO
Дата сообщения: 20.06.2010 00:03
Orion_76
у меня примерно так:

Цитата:
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
Автор: Orion_76
Дата сообщения: 20.06.2010 00:16
AZJIO
Наверное я не корректно поставил вопрос...-))
В скрипте , перед операцией с файлом (копирование, перемещение, запись, чтение), хотелось бы проверить права текущего пользователя на эти операции.
Что-бы потом не удивляться, почему операция не удалась..-)))
Надо просто функцию, которая возвратила бы TRUE, если опрерация с файлом доступна пользователю, от имени которого выполняется скрипт.




Автор: KiLL
Дата сообщения: 20.06.2010 01:30
Может кому-то будет интересен один из кирпичиков полной автоматизации развертывания системы из образа. Знаюи что тема давно раскрыта, однако методы/способы/требования у меня свои, следовательно и инструменты тоже. Решения этого вопроса не нашел, поэтому набросал сам. В процессе написания использовал 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
Автор: Orion_76
Дата сообщения: 20.06.2010 13:05
Вот вроде нашел что надо,
ТОлько не пойму, что она возвращает..


Код: 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
Автор: Kar1son
Дата сообщения: 21.06.2010 08:04
Orion_76
так то что написал AZJIO как раз подходит
Автор: Orion_76
Дата сообщения: 21.06.2010 10:33
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
Автор: Kar1son
Дата сообщения: 21.06.2010 11:14

Цитата:
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


а голова на что? принцип полностью показан, тут три строки дописать
Автор: Orion_76
Дата сообщения: 21.06.2010 11:45
Kar1son


Цитата:
а голова на что? принцип полностью показан, тут три строки дописать


Прочтите внимательней код..

$access0 - читается из ГУЯ
Эта функция для УСТАНОВКИ разрешений
А надо для ПРОВЕРКИ

т.е что-то типа:

$res=ФункцияПроверкиРазрешений($ИмяФайла,$ИмяПользователя)
If $res==1 Then
...
else
...
EnfIF

В принципе вроде нужную функцию нашел(в посте выше-Func _GetFileSecurityDACL($sFile)
)
Она возвращает какой-то секъюрити дескриптор (в WinApi не силен), т.е. шестнадцатиричную строку.
Осталось только догадаться, как из него нужную инфу выдернуть.



Автор: Kar1son
Дата сообщения: 21.06.2010 12:01
Orion_76 ладно убедил слепой дятел это все таки я
Автор: AZJIO
Дата сообщения: 21.06.2010 13:20
Решил занятся [more=переводом]1. Для частичной автоматизации сделал замену строк по всем файлам справки:

Цитата:
<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
Автор: vicbox777
Дата сообщения: 21.06.2010 13:29
Orion_76 11:45 21-06-2010
Цитата:
Она возвращает какой-то секъюрити дескриптор (в 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
Автор: Orion_76
Дата сообщения: 21.06.2010 16:09
vicbox777

Цитата:
IsValidSecurityDescriptor

Вроде просто определяет валидность структуры дескриптора?
Автор: vicbox777
Дата сообщения: 21.06.2010 16:51

Цитата:
Вроде просто определяет валидность структуры дескриптора?

Извиняюсь.
Автор: Orion_76
Дата сообщения: 21.06.2010 23:56
vicbox777
Бывает-))

Блин...весь инет перерыл...
Неужели это не актуально....?
Есть примеры на С и на VB...
но там кода строк на 150...
Можно конечно вывод cacls распарсить...или WMI
Но это ненадежно или через Ж...
Автор: Cegpuk
Дата сообщения: 22.06.2010 01:39
Как этот же скрипт можно написать лучше (в самом прямом смысле)?

Код: 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
Автор: degid
Дата сообщения: 22.06.2010 16:58

Цитата:
Kar1son


Цитата: а голова на что? принцип полностью показан, тут три строки дописать


Прочтите внимательней код..

$access0 - читается из ГУЯ
Эта функция для УСТАНОВКИ разрешений
А надо для ПРОВЕРКИ
Автор: ringer
Дата сообщения: 22.06.2010 19:22
сделал скрипт(ехе) задача которого нажимать кнопки в окне приложения, и выбирать в списке(по типу списка диспетчера задач) указанные строки, сохранять инфу из окна в файл
что делать при запуск определяется параметрами запуска

сам запуск этого скрипта(ехе) производится через веб-панель т.е. через PHP exec
на локальной системе, где и апач и приложение запущены от одного юзера все работает без проблем

на системе где апач запущен от SYSTEM, а приложение от моего юзера, этот скрипт(ехе) запускается, но не выдает инфы видимо из-за того что он запускается от имени SYSTEM и просто не видит окно приложения

сделал еще один скрипт(ехе), который запускает первый от того же юзера, от которого запущено приложение
судя по диспетчеру задач он действительно стал запускаться от того же юзера что и приложение, но взять инфу из окна, или нажать кнопку так и не смог

п.с. сделал тоже самое, только вместо своего скрипта подставил calc.exe
в диспетчере задач calc.exe появился от моего имени, но самого окна на рабочем столе не появилось, может в этом проблема
хотя в моем скрипте(ехе) нет гуи
Автор: AZJIO
Дата сообщения: 22.06.2010 22:50
degid
а почему XCACLS? Я попробовал cacls, который уже есть в системе, с ним тоже выдаёт инфу, вот тест:

Цитата:
cacls C:\WINDOWS
PAUSE
с консоли прочитать и отдетектить регулярным выражением вроде не проблема.


ringer
А можно пример, хотя бы того же диспетчера задач, чтоб пытался нажать на нём кнопки, я бы у себя проверил.
А почему не видно ожидание активного окна? Ведь скрипт явно не успеет его открыть, как все клики уже отработают...
Автор: ringer
Дата сообщения: 22.06.2010 23:02
пробовал запускать скрипт вручную - т.е. даблклик по ехе шнику
проблем с не успеванием не было

Страницы: 12345678910111213

Предыдущая тема: Проблемы с VMware Workstation (часть 4)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.