Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 3)

Модерирует : gyra, Maz

gyra (23-01-2020 10:51): AutoIT (Часть 4)  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

AZJIO



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
;  @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

Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 09:24 15-06-2010 | Исправлено: AZJIO, 21:08 13-04-2011
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 3)
gyra (23-01-2020 10:51): AutoIT (Часть 4)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru