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

» AutoIT

Автор: AZJIO
Дата сообщения: 10.06.2010 11:31
Kar1son
Немного пример упрощённой записи

Цитата:
$Output = "ArpAlwaysSourceRoute: " & $objItem.ArpAlwaysSourceRoute & @CRLF & _
"ArpUseEtherSNAP: " & $objItem.ArpUseEtherSNAP & @CRLF & _
"Caption: " & $objItem.Caption & @CRLF & _
"DatabasePath: " & $objItem.DatabasePath & @CRLF & _
"DeadGWDetectEnabled: " & $objItem.DeadGWDetectEnabled & @CRLF & _


смысл в том, что любые многостроковые данные можно указать одной строкой, переходы строк в данном случае выплняют @CRLF. Но так как запись в одну строку неудобно читается, то выполняем перенос кода с помощью символа нижнего подчёркивания. В итоге вместо многократного объединения данных происходит просто один раз вставка данных в переменную $Output.
Способ добавления точно также

Цитата:
$Output &= "ArpAlwaysSourceRoute: " & $objItem.ArpAlwaysSourceRoute & @CRLF & _
"ArpUseEtherSNAP: " & $objItem.ArpUseEtherSNAP & @CRLF & _
"Caption: " & $objItem.Caption & @CRLF & _
"DatabasePath: " & $objItem.DatabasePath & @CRLF & _
"DeadGWDetectEnabled: " & $objItem.DeadGWDetectEnabled & @CRLF & _
Автор: Kar1son
Дата сообщения: 10.06.2010 11:40
AZJIO
я знаю) тот код не я писал, это скриптоматик выдал "; Generated by AutoIt Scriptomatic"
Автор: drmodjo84
Дата сообщения: 11.06.2010 20:59
Нужно чтобы скрипт с эмулировал нажатие правой мыши на файле,затем в свойства и установил галки на совместимости правах доступа и операционки.Но при этом нужна конкретность,без использования координатов и названий типа "Свойства".Файл будет использоваться на разных машинах с операционкой "Семерка".
Я новичек и не могу заставить скрипт попасть на файл правой клавой.Объясните подробно плиз.
Автор: AZJIO
Дата сообщения: 12.06.2010 05:39
drmodjo84
Попробуй лучше клавишами используя Send
Alt+Enter - открываем окно свойств exe-файла
Ctrl+Tab - перемещение по вкладкам 2 раза
space - пробел - ставим галочку
Tab - переход к элементу списка
стрелка вниз - выбор совместимой системы
Enter - применить

скрипт можно прописать в реестр для файлов exe или использовать горячую клавишу, но тогда он будет всегда висеть в процессах.

________________________________

Есть у кого нибудь пример автоматического скролинга строк текста нужен для диалога "О программе". Случайно скачал утилиту (370кб), понравилась плавное движение текста.
Автор: drmodjo84
Дата сообщения: 12.06.2010 06:25
Можете привести пример скрипта .Как начать?Как правильно указать на файл который должен использоваться скриптом send?
Автор: AZJIO
Дата сообщения: 12.06.2010 07:14
drmodjo84

Цитата:
;Регистрация в контекстное меню
RegRead("HKCR\exefile\shell\Совместимость\command", '')
If @error=1 Then
;регистрация в реестре и копирование в системную папку, при первом запуске
RegWrite("HKCR\exefile\shell\Совместимость\command","","REG_SZ",@AutoItExe&' "'&@SystemDir&'\Compatibility.au3" "%1"')
If Not FileExists(@SystemDir&'\Compatibility.au3') Then FileCopy(@ScriptDir&'\Compatibility.au3', @SystemDir,1)
EndIf

; выход если нет параметра
If $CmdLine[0]=0 Then Exit
;выделяем файл в окне
Run('Explorer.exe /select,"'&$CmdLine[1]&'"')
; посылаем команду для открытия окна Свойства
Send("!{ENTER}")
Sleep(30)
$win=WinGetHandle(WinList("[REGEXPTITLE:Свойства:*]"))
; ожидаем открытие окна
WinWaitActive($win)
Sleep(30)
;посылаем команду окну горячими клавишами Windows... {TAB 2} - повторить TAB два раза
Send("^{TAB 2}")
Send("{SPACE}")
Send("{TAB}")
Send("{DOWN 3}")
Send("{ENTER}")
Автор: madmasles
Дата сообщения: 12.06.2010 08:57
AZJIO
Цитата:
понравилась плавное движение текста.

Посмотрите здесь: Au3ToPost ( ...\Includes\AboutBox.au3) и здесь: Прокрутка текста без мерцаний.

С праздником всех!
Автор: AZJIO
Дата сообщения: 12.06.2010 12:31
Попробовал используя UDF Table.au3 в скрипте Check_md5.au3 сделать диалог вывода, смотрится красиво, хотя много лишнего кода, а информация о хеш в принципе не нужна.



madmasles
Да, я знаю, но не много есть мерцание. А в той утилите практически нет, если только всматриваться. И процессор она на 30% меньше напрягает.
Автор: AZJIO
Дата сообщения: 14.06.2010 19:41
Сделал полный портабельный дистрибутив AutoIt3 v3.3.6.1 (20Мб), но при полных тестах столкнулся с проблемой, не работают директивы:

Цитата:
#AutoIt3Wrapper_Run_After="%autoitdir%\SciTE\ResHacker\ResHacker.exe" -add "%out%", "%out%", %scriptdir%\TextCorrection1.ico, IconGroup, 1, 0
#AutoIt3Wrapper_Run_After="%autoitdir%\SciTE\ResHacker\ResHacker.exe" -delete "%out%", "%out%", DIALOG, 1000,
#AutoIt3Wrapper_Run_After="%autoitdir%\SciTE\ResHacker\ResHacker.exe" -delete "%out%", "%out%", ICON, 161,
#AutoIt3Wrapper_Run_After="%autoitdir%\SciTE\upx\upx.exe" -7 --compress-icons=0 "%out%"

Проблема в пробелах пути папки "Program Files", если извлекаю дистрибутив в корень, то работает нормально.
Автор: Cegpuk
Дата сообщения: 14.06.2010 20:04
1. Объясните, как работает функция. Не могу понять каким образом происходит переключение состояния не в паузе/в паузе.

Код: Global $Paused
HotKeySet("{PAUSE}", "TogglePause")

Func TogglePause()
$Paused = NOT $Paused
While $Paused
sleep(100)
WEnd
EndFunc
Автор: vicbox777
Дата сообщения: 14.06.2010 20:29
Cegpuk 21:04 14-06-2010
Цитата:
1. Объясните, как работает функция. Не могу понять каким образом происходит переключение состояния не в паузе/в паузе.

Поставь после $Paused = NOT $Paused, например msgbox и посмотри, какое значение будет в переменной - $Paused - сам догадаешся. Значение меняется так, ибо НЕ Истина=ложь, ибо НЕ Ложь=истина. Цикл работает пока Истина.
Автор: madmasles
Дата сообщения: 14.06.2010 20:46
Cegpuk

Цитата:
Умеет ли AutoIT работать с памятью

Умеет. Посмотрите эту UDF NomadMemory.
И в англ. справке раздел Memory Management.
Автор: Cegpuk
Дата сообщения: 14.06.2010 21:34
vicbox777,
Я понимаю, как работает $Paused = NOT $Paused. Мне не понятно следующее: при первом же заходе в функцию $Paused получает NOT и следовательно While уже не должен работать. Но оно работает.
Вот такое вариант мне полностью понятен:
Код: Func Pause()
    $Paused = NOT $Paused
    While $Paused=True
     Sleep(100)
    WEnd
EndFunc
Автор: ViSiToR
Дата сообщения: 14.06.2010 22:16
Cegpuk 22:34 14-06-2010
Цитата:
MsgBox всё разъяснил

Угу, это (или ToolTip в некоторых ситуациях) надёжный и простой метод отладки кода. У меня самая частоиспользуемая аббревиатура это mb (MsgBox(64, 'Title', |)).
Автор: AZJIO
Дата сообщения: 15.06.2010 08:24
Обновил скрипт [more=list_var_funk.au3]
Код: ; @AZJIO 25.10.2010 - 11.04.2011

; En
$LngTitle='Variables and Functions'
$LngFO1='Select File.'
$LngFO2='Script'
$LngMs1='Message'
$LngMs2='No variables.'&@CRLF&'Continue?'
$LngLVr='Variables'
$LngLFu='Functions'
$LngLPc='pieces'
$LngCb1='> clipboard'
$LngCbH1='Copy the list of variables'&@CRLF&'to the clipboard'
$LngCb2='clipboard >'
$LngCbH2='Import from the clipboard'&@CRLF&'and show a list of variables'
$LngLcH='List as a local'&@CRLF&'variable declaration'
$LngCbHF='Copy the list of functions'&@CRLF&'to the clipboard'
$LngInc='See all the functions'&@CRLF&'in the directory "Include"'
$LngLt1='Done in'
$LngLt2='sec'
$LngUse='Use'
$LngRep='Counting the number '&@CRLF&'of repetitions of variables'
$LngOpi='Open the file folder "Include"'
$helpmsg='Hotkeys'&@CRLF&@CRLF& _
'Ctrl + Left Arrow - a list of variables to copy to clipboard'&@CRLF& _
'Ctrl + Right Arrow - a list of functions to copy to clipboard'&@CRLF& _
'Ctrl + Down Arrow - imported from Clipboard'&@CRLF& _
'Ctrl + Up Arrow - a list of variables to copy to the clipboard as a local variable declaration'&@CRLF&@CRLF& _
'Can throw the script out the window or directory scripts. In the latter case, the output only functions. Also specify the path to the script at the command prompt, which is convenient when working in a text editor.'&@CRLF&@CRLF& _
'The script is designed to show the variables and functions in the scripts, to avoid duplication, to be able to fearlessly copy of the code of one script to another. Allows you to keep track of variable names to avoid duplication when you want to rename a variable, eg $Path and $PathName. When replacing the $Path will damage $PathName, so you need to temporarily rename $PathName, then rename $Path, and then restore the $PathName. Variables and functions are displayed in one instance and sorted. The window supports drag-and-drop, and resize. The time counter shows the reading of the script or scripts directory.'

$Lang_dll = DllOpen("kernel32.dll")
$UserIntLang=DllCall ( $Lang_dll, "int", "GetUserDefaultUILanguage" )
If Not @error Then $UserIntLang=Hex($UserIntLang[0],4)
DllClose($Lang_dll)

; Ru
; если русская локализация, то русский язык
If $UserIntLang = 0419 Then
    $LngTitle='Переменные и функции'
    $LngFO1='Выбор файла.'
    $LngFO2='Скрипт'
    $LngMs1='Сообщение'
    $LngMs2='Нет переменных.'&@CRLF&'Продолжить?'
    $LngLVr='Переменные'
    $LngLFu='Функции'
    $LngLPc='шт'
    $LngCb1='в буфер'
    $LngCbH1='Скопировать список переменных '&@CRLF&'в буфер обмена'
    $LngCb2='из буфера'
    $LngCbH2='Прочитать код из буфера'&@CRLF&'и показать список переменных'
    $LngLcH='Список в виде локального'&@CRLF&'объявления переменных'
    $LngCbHF='Скопировать список функций '&@CRLF&'в буфер обмена'
    $LngInc='Показать все функции'&@CRLF&'каталога Include'
    $LngLt1='Выполнено за'
    $LngLt2='сек'
    $LngUse='Используйте'
    $LngRep='Подсчитывать количество'&@CRLF&'повторов переменных'
    $LngOpi='Открыть файл папки Include'
    $helpmsg='Горячие клавиши'&@CRLF&@CRLF& _
'Ctrl+стрелка влево - список переменных скопировать в буфер обмена'&@CRLF& _
'Ctrl+стрелка вправо - список функций скопировать в буфер обмена'&@CRLF& _
'Ctrl+стрелка вниз - обработать буфер обмена'&@CRLF& _
'Ctrl+стрелка вверх - список переменных скопировать в буфер обмена в виде локального объявления переменных'&@CRLF&@CRLF& _
'Можете кинуть скрипт в окно или каталог скриптов. В последнем случае вывод только функций. Также указать путь к скрипту в ком-строке, что удобно при работе в текстовом редакторе имеющего вызов других утилит.'&@CRLF&@CRLF& _
'Скрипт предназначен для просмотра переменных и функций в скриптах на предмет пересечения, для возможности безбоязненно копировать часть кода одного скрипта в другой. Также позволяет визуально отследить что при выполнении замены имени переменной не произойдёт порча близкой по имени переменной, например $Path и $PathName. При замене $Path испортится $PathName, поэтому можно временно переименовать сначала $PathName, а потом $Path и далее восстановить $PathName. Переменные и функции читаются из скрипта в одном экзэмпляре и сортируются. Окно поддерживает drag-and-drop, и изменение размера окна. Счётчик времени показывает время считывания скрипта или каталога скриптов.'
EndIf



#Include<Array.au3>
Opt("GUIResizeMode", 0x0322)
$bufer_read33 = 0 ; если 1 то читаем из буфера, если 0 то диалог выбора файла
Global $k, $kf, $text01, $text02, $text0, $text, $Info_Edit1, $Info_Edit2, $Time, $timer, $FileName='', $FilePath

If $CmdLine[0]=0 Then
    If $bufer_read33 = 1 Then
        $text = ClipGet()
    Else
        $Path = FileOpenDialog($LngFO1, @WorkingDir & "", $LngFO2&" (*.au3)", 1 + 4)
        If @error Then Exit
        $FileName=StringRegExpReplace($Path, '(^.*)\\(.*)$', '\2')
        $file = FileOpen($Path, 0)
        $text = FileRead($file)
        FileClose($file)
        $FilePath=$Path
    EndIf
Else
    If FileExists($CmdLine[1]) Then
        $file = FileOpen($CmdLine[1], 0)
        $text = FileRead($file)
        FileClose($file)
        $FileName=StringRegExpReplace($CmdLine[1], '(^.*)\\(.*)$', '\2')
        $FilePath=$CmdLine[1]
    EndIf
EndIf

Global $TrChe = 0
_ReadAU3($text)

If $k = 0 And MsgBox(4, $LngMs1, $LngMs2)=7 Then Exit
If $k < 25 Then
    $pos = $k
    If $k = 0 Then $pos=5
Else
    $pos = 25
EndIf


$Gui = GUICreate($LngTitle, 410, $pos * 17 + 140, -1, -1, 0x00040000+0x00020000+0x00010000, 0x00000010)
$CatchDrop = GUICtrlCreateLabel("", 0, 0, 410, $pos * 17 + 120)
GUICtrlSetState(-1, 128 + 8)
GUICtrlSetResizing(-1, 1)
$per=GUICtrlCreateLabel($LngLVr&' - '&$k&' '&$LngLPc, 8, 3, 190, 17)
GUICtrlSetResizing(-1, 1+2+32+512)
$fun=GUICtrlCreateLabel($LngLFu&' - '&$kf&' '&$LngLPc, 208, 3, 190, 17)
GUICtrlSetResizing(-1, 1+4+32+512)
$Info_Edit1 = GUICtrlCreateEdit($text01, 8, 22, 190, $pos * 17 + 40)
GUICtrlSetResizing(-1, 1+2+32+64)
$Info_Edit2 = GUICtrlCreateEdit($text02, 208, 22, 190, $pos * 17 + 40)
GUICtrlSetResizing(-1, 1+4+32+64)
$byf1 = GUICtrlCreateButton($LngCb1, 8, $pos * 17 + 67, 61, 22)
GUICtrlSetResizing(-1, 1+2+64+256+512)
GUICtrlSetTip(-1, $LngCbH1)
$Openbyf = GUICtrlCreateButton($LngCb2, 72, $pos * 17 + 67, 61, 22)
GUICtrlSetResizing(-1, 1+2+64+256+512)
GUICtrlSetTip(-1, $LngCbH2)
$Locbyf = GUICtrlCreateButton('Local', 136, $pos * 17 + 67, 61, 22)
GUICtrlSetResizing(-1, 1+2+64+256+512)
GUICtrlSetTip(-1, $LngLcH)
$byf2 = GUICtrlCreateButton($LngCb1, 208, $pos * 17 + 67, 61, 22)
GUICtrlSetResizing(-1, 1+4+64+256+512)
GUICtrlSetTip(-1, $LngCbHF)
$Include = GUICtrlCreateButton('Include', 272, $pos * 17 + 67, 61, 22)
GUICtrlSetResizing(-1, 1+4+64+256+512)
GUICtrlSetTip(-1, $LngInc)
$help = GUICtrlCreateButton('?', 336, $pos * 17 + 67, 61, 22)
GUICtrlSetResizing(-1, 1+4+64+256+512)
$Time = GUICtrlCreateLabel($LngLt1&' '&Round($timer/1000, 1)&' '&$LngLt2, 8, $pos * 17 + 93, 160, 17)
GUICtrlSetResizing(-1, 1+64+512)
GUICtrlCreateLabel($LngUse&' drag-and-drop', 178, $pos * 17 + 93, 160, 17)
GUICtrlSetResizing(-1, 1+64+512)
If $FileName<>'' Then WinSetTitle($Gui, '', $FileName&' - '&$LngTitle)

$Che = GUICtrlCreateCheckbox('N', 340, $pos * 17 + 67+24, 25, 17)
GUICtrlSetResizing(-1, 1+4+64+256+512)
GUICtrlSetTip(-1, $LngRep)
$OpInc= GUICtrlCreateButton('Open', 369, $pos * 17 + 67+24, 36, 18)
GUICtrlSetResizing(-1, 1+4+64+256+512)
GUICtrlSetTip(-1, $LngOpi)

Dim $AccelKeys[4][2]=[["^{LEFT}", $byf1], ["^{RIGHT}", $byf2], ["^{DOWN}", $Openbyf], ["^{UP}", $Locbyf]]

GUISetAccelerators($AccelKeys)

GUISetState()
GUIRegisterMsg(0x0024, "WM_GETMINMAXINFO")
Send('^{HOME}')

While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $OpInc
            $curretPath = RegRead("HKLM\SOFTWARE\AutoIt v3\AutoIt","InstallDir")&'\Include'
            If @error Or Not FileExists($curretPath) Then $curretPath=@WorkingDir
            $OpenFile = FileOpenDialog('Open', $curretPath, 'Script (*.au3)', 1, '', $Gui)
            If @error Then ContinueLoop
            $FilePath=$OpenFile
            _OpenFile($FilePath)
        Case $msg = $help
            _MsgFile()
        Case $msg = $Include
            $curretPath = RegRead("HKLM\SOFTWARE\AutoIt v3\AutoIt","InstallDir")&'\Include'
            If @error Or Not FileExists($curretPath) Then ContinueLoop
            _Include($curretPath)
        Case $msg = $Locbyf
            ClipPut('Local '&StringRegExpReplace(GUICtrlRead($Info_Edit1), @CRLF&'\$', ', $'))
        Case $msg = $Openbyf
            $text=ClipGet()
            _ReadAU3($text)
            GUICtrlSetData($per, $LngLVr&' - '&$k&' '&$LngLPc)
            GUICtrlSetData($fun, $LngLFu&' - '&$kf&' '&$LngLPc)
            WinSetTitle($Gui, '', $LngCb2&' - '&$LngTitle)
        Case $msg = $byf1
            ClipPut(GUICtrlRead($Info_Edit1))
        Case $msg = $byf2
            ClipPut(GUICtrlRead($Info_Edit2))
        Case $msg = $Che
            If GUICtrlRead($Che)=1 Then
                $TrChe = 1
            Else
                $TrChe = 0
            EndIf
            If FileExists($FilePath) Then
                _OpenFile($FilePath)
            EndIf
        Case $msg = -13
            $FilePath=@GUI_DragFile
            _OpenFile(@GUI_DragFile)
        Case $msg = -3
            Exit
    EndSelect
WEnd


Func _OpenFile($OpenPath)
    If StringInStr(FileGetAttrib($OpenPath), "D") Then
        _Include($OpenPath)
    ElseIf StringRight($OpenPath, 4)='.au3' Then
        $file = FileOpen($OpenPath, 0)
        $text = FileRead($file)
        FileClose($file)
        _ReadAU3($text)
        GUICtrlSetData($per, $LngLVr&' - '&$k&' '&$LngLPc)
        GUICtrlSetData($fun, $LngLFu&' - '&$kf&' '&$LngLPc)
        WinSetTitle($Gui, '', StringRegExpReplace($OpenPath, '(^.*)\\(.*)$', '\2')&' - '&$LngTitle)
    EndIf
EndFunc

Func _Include($curretPath)
    $search = _FileFindFirstFile($curretPath & "\*.au3",1)
    If $search <> -1 Then
        $textAll=''
        $timer = TimerInit()
        $kf2=0
        While 1
            $file_open = _FileFindNextFile($search)
            If @error Then ExitLoop
            $file = FileOpen($curretPath&'\'&$file_open, 0)
            $text = FileRead($file)
            FileClose($file)

            $aText2 = StringRegExp($text, '(?:\sFunc)\s+(\w*)', 3)
            If Not @error Then
                $kf2+=UBound($aText2)
                $textAll &= @CRLF& @CRLF& @CRLF&'+++++ '&$file_open&' +++++'& @CRLF & @CRLF
                GUICtrlSetData($Time, $file_open)
                For $i In $aText2
                    $textAll &= $i & @CRLF
                Next
            Else
                $textAll &= @CRLF&'- - - - '&$file_open&' - - - -'
            EndIf
        WEnd
        _FileFindClose($search)
        WinSetTitle($Gui, '', StringRegExpReplace($curretPath, '(^.*)\\(.*)$', '\2')&' - '&$LngTitle)
        GUICtrlSetData($Info_Edit2, $textAll)
        GUICtrlSetData($Info_Edit1, '')
        GUICtrlSetData($per, $LngLVr)
        GUICtrlSetData($fun, $LngLFu&' - '&$kf&' '&$LngLPc)
        $timer=TimerDiff($timer)
        GUICtrlSetData($Time, $LngLt1&' '&Round($timer/1000, 2)&' '&$LngLt2)
    EndIf
EndFunc

Func _ReadAU3($text)
    $timer = TimerInit() ; засекаем время
    ; начинаем поиск переменных
    $aT1 = StringRegExp($text & @CRLF, '(?<=\$)\w+', 3) ; детектируем переменные в массив
    If Not @error Then
        $k=0
        For $i = 0 To UBound($aT1) -1
            Assign($aT1[$i]&'_3j5d2f8k_', Eval($aT1[$i]&'_3j5d2f8k_')+1, 1)
            If Eval($aT1[$i]&'_3j5d2f8k_') = 1 Then
                ; $aT1[$k]= "$" &$aT1[$i]
                $aT1[$k]=$aT1[$i]
                $k+=1
            EndIf
        Next
        ReDim $aT1[$k]
        _ArraySort($aT1) ; сортировка массива
        Dim $aT134[$k]
        
        If $TrChe=1 Then
            For $i = 0 To UBound($aT1) -1
                    $aT1[$i]= "$" &$aT1[$i]&' - '&Eval($aT1[$i]&'_3j5d2f8k_')
            Next
        Else
            For $i = 0 To UBound($aT1) -1
                    $aT1[$i]= "$" &$aT1[$i]
            Next
        EndIf

        $text01 = ''
        For $i In $aT1 ; объединение массива в многостроковый текст
            $text01 &= $i & @CRLF
        Next

        GUICtrlSetData($Info_Edit1, $text01)
    Else
        $k=0
    EndIf

    ; начинаем поиск функций
    $aText2 = StringRegExp($text, '(?:\sFunc)\s+(\w*)', 3) ; детектируем функции в массив
    If Not @error Then
        _ArraySort($aText2) ; сортировка массива

        $text02 = ''
        $kf=UBound($aText2)
        For $i In $aText2 ; объединение массива в многостроковый текст
            $text02 &= $i & @CRLF
        Next
        ; конец поиск функций
        GUICtrlSetData($Info_Edit2, $text02)
    Else
        $kf=0
    EndIf
    $timer=TimerDiff($timer)
    GUICtrlSetData($Time, $LngLt1&' '&Round($timer/1000, 2)&' '&$LngLt2)
EndFunc

; #INDEX# =======================================================================================================================
; Title .........: FileFind
; AutoIt Version : 3.2.3++
; Language ......: Русский
; Description ...: Поиск файлов, включая подкаталоги, синтаксис и возвращаемое значение совпадают с FileFindFirstFile()
; FileFindNextFile(), в FileFindFirstFile("filename" [,flag]) добавлен необязатенльный параметр flag
; flag=1 - поиск файлов
; flag=2 - поиск каталогов , по умолчанию flag=3
; Author(s) .....: Nikzzzz
; ===============================================================================================================================

Func _FileFindFirstFile($sFile,$iMode=3)
Local $avStack[5]
$avStack[0] = 0
$avStack[1] = StringMid($sFile, StringInStr($sFile, "\", 0, -1) + 1)
$avStack[1] = StringRegExpReplace($avStack[1], "[\\\(\)\{\}\+\$\.]", "\\\0")
$avStack[1] = StringReplace($avStack[1], "*", ".*")
$avStack[1] = StringReplace($avStack[1], "?", ".")
$avStack[2] = $iMode
$avStack[3] = StringLeft($sFile, StringInStr($sFile, "\", 0, -1) - 1)
$avStack[4] = FileFindFirstFile($avStack[3] & "\*.*")
If $avStack[4] = -1 Then
SetError(1)
Return -1
EndIf
Return $avStack
EndFunc ;==>_FileFindFirstFile

Func _FileFindNextFile(ByRef $avStack)
Local $sFindFile
While 1
$sFindFile = FileFindNextFile($avStack[$avStack[0] + 4])
If Not @error Then
If StringInStr(FileGetAttrib($avStack[$avStack[0] + 3] & "\" & $sFindFile), "D") > 0 Then
$avStack[0] += 2
ReDim $avStack[$avStack[0] + 5]
$avStack[$avStack[0] + 3] = $avStack[$avStack[0]+1] & "\" & $sFindFile
$avStack[$avStack[0] + 4] = FileFindFirstFile($avStack[$avStack[0] + 3] & "\*.*")
If BitAND($avStack[2],2) Then Return StringMid($avStack[$avStack[0] + 3], StringLen($avStack[3]) + 2)
ContinueLoop
Else
If StringRegExpReplace($sFindFile, $avStack[1], "") = "" Then
SetError(0)
If BitAND($avStack[2],1) Then Return StringMid($avStack[$avStack[0] + 3] & "\" & $sFindFile, StringLen($avStack[3]) + 2)
Else
ContinueLoop
EndIf
EndIf
Else
If $avStack[0] = 0 Then
SetError(-1)
Return ""
Else
FileClose($avStack[$avStack[0] + 4])
$avStack[0] -= 2
ReDim $avStack[$avStack[0] + 5]
EndIf
EndIf
WEnd
EndFunc ;==>_FileFindNextFile

Func _FileFindClose(ByRef $avStack)
Local $iRetVaue
While $avStack[0] >= 0
$iRetVaue=FileClose($avStack[$avStack[0] + 4])
$avStack[0] -= 2
WEnd
ReDim $avStack[1]
Return $iRetVaue
EndFunc ;==>_FileFindClose

Func WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam)

Local $aWorkArea = _WinAPI_GetWorkingArea()

If $hWnd = $GUI Then
Local $tMINMAXINFO = DllStructCreate("int;int;" & _
"int MaxSizeX; int MaxSizeY;" & _
"int MaxPositionX;int MaxPositionY;" & _
"int MinTrackSizeX; int MinTrackSizeY;" & _
"int MaxTrackSizeX; int MaxTrackSizeY", _
$lParam)
DllStructSetData($tMINMAXINFO, "MinTrackSizeX", 410) ; минимальные размеры окна
DllStructSetData($tMINMAXINFO, "MinTrackSizeY", 200)
DllStructSetData($tMINMAXINFO, "MaxPositionX", $aWorkArea[0])
DllStructSetData($tMINMAXINFO, "MaxPositionY", $aWorkArea[1])
DllStructSetData($tMINMAXINFO, "MaxSizeX", 600) ; размеры развёрнутого состояния ( просто удали строку, чтоб игнорировать критерий)
DllStructSetData($tMINMAXINFO, "MaxSizeY", $aWorkArea[3]-$aWorkArea[1])
EndIf
EndFunc

Func _WinAPI_GetWorkingArea()
Local Const $SPI_GETWORKAREA = 48
Local $stRECT = DllStructCreate("long; long; long; long")

Local $SPIRet = DllCall("User32.dll", "int", "SystemParametersInfo", "uint", $SPI_GETWORKAREA, "uint", 0, "ptr", DllStructGetPtr($stRECT), "uint", 0)
If @error Then Return 0
If $SPIRet[0] = 0 Then Return 0

Local $sLeftArea = DllStructGetData($stRECT, 1)
Local $sTopArea = DllStructGetData($stRECT, 2)
Local $sRightArea = DllStructGetData($stRECT, 3)
Local $sBottomArea = DllStructGetData($stRECT, 4)

Local $aRet[4] = [$sLeftArea, $sTopArea, $sRightArea, $sBottomArea]
Return $aRet
EndFunc


Func _MsgFile()
    GUISetState(@SW_DISABLE, $Gui)
$Gui1 = GUICreate('Сообщение', 500, 340, -1, -1, -1, 0x00000080,$Gui)
    GUICtrlCreateLabel($helpmsg, 15, 10, 480, 330)
    GUISetState(@SW_SHOW, $Gui1)
    While 1
        $msg = GUIGetMsg()
        If $msg = -3 Then
            $msg = $Gui
            GUISetState(@SW_ENABLE, $Gui)
            GUIDelete($Gui1)
            ExitLoop
        EndIf
WEnd
EndFunc
Автор: Kar1son
Дата сообщения: 15.06.2010 08:43

Цитата:
mb (MsgBox(64, 'Title', |))

а что это? mb в справке не нашел, а на | ругается как не допустимый символ...
Автор: afanasy_spb_ru
Дата сообщения: 15.06.2010 12:18
Добрый день, уважаемые!
Написал в AutoIt утилиту-текстовый обработчик и откомпилировал её под DOS консоль. Хотелось бы добавить небольшой текст-описание, который бы был виден при старте утилиты в DOS консоли...
Подскажите, пожалуйста, как писать строки в DOS консоль...

(Изиняюсь, если тема уже поднималась... Утилита будет использоваться также на ПК под Linux, так что решения для записи строк в консоль Windows не катят...)
Автор: 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, если опрерация с файлом доступна пользователю, от имени которого выполняется скрипт.




Страницы: 12345678910111213

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


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