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

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

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

gyra (23-01-2020 10:51): AutoIT (Часть 4)  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

   

Widok



Moderator-Следопыт
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

 
Описание:

Цитата:
AutoIt v3 - это язык для написания сценариев, напоминающий BASIC. Основным его назначением является автоматизация работ с Windows GUI (графическим интерфейсом пользователя MS Windows). Для выполнения этой сложной задачи предоставляется комбинация испытанных методов, включающих в себя эмуляцию нажатий комбинаций клавиш клавиатуры, перемещения указателя мыши, управление окнами и их визуальными элементами. Как показывает практика, эти "приводные ремни" весьма эффективны для получения работающих решений в ситуациях, когда другие стандартные средства (например, VBScript и SendKeys) оказываются бессильны.
Умеет он очень и очень многое! Бесплатный.

 
  • Справки
  • Инструменты
  • Ресурсы, посвящённые AutoIt
  • Полезные советы новичкам и не только
  • Готовые решения
  • Скрипт раскраски кода AutoIt для публикации в форумах
     


     
    За шапкой следит ViSiToR / AZJIO  

  • Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 13:07 01-06-2010 | Исправлено: Maz, 12:29 10-01-2020
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud
    Утилита Compare strings. Там есть функции, их можно использовать без утилиты, которая просто GUI для удобной установки параметров.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 10:41 08-05-2013
    Zloy_Gelud



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

    Код:
    Local $hLog = FileOpen(@ScriptDir & "\changes.txt", 2)
     
    Local $sNew = FileRead(@ScriptDir & "\changes_new.txt")
    Local $sOld = FileRead(@ScriptDir & "\changes_old.txt")
     
    Local $aOld = StringRegExp($sOld, "(?m)^\s{3}\*\s(.*)\n([0-9a-z]{7})", 3)
    Local $sStart, $sEnd, $aNew
    For $i = 0 To UBound($aOld) - 1 Step 2
        $sStart = $aOld[$i]
        $sEnd = $aOld[$i + 1]
     
        FileWrite($hLog, "*** " & $sStart & @CRLF)
     
        $aNew = StringRegExp($sNew, "(?s)\*\s" & $sStart & "(.*?)" & $sEnd, 1)
        If (StringStripWS($aNew[0], 3) <> "") Then
            FileWrite($hLog, $aNew[0] & @CRLF)
        EndIf
    Next
    FileClose($hLog)

    Отрабатывает на моем проце за 11 сек.

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 11:47 08-05-2013 | Исправлено: Zloy_Gelud, 11:49 08-05-2013
    Alex_Piggy

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Добрый день
    Zloy_Gelud
    Прошу прощения за беспокойство. На моем компе Ваш скрипт отрабатывает за 25 с (против 4 мин для моего третьего варианта - ошибся с расчетом скорости) -  но результаты совсем разные (в ~2  раза отличается количество строк и размер)... Пожалуйста, посмотрите в чем дело...
    AZJIO
    Спасибо за интересную информацию.
     
    Добавлено: Та же логика на Scripting.Dictionary отрабатывает за 2 минуты... Вариант 4.

    Всего записей: 1891 | Зарегистр. 07-08-2002 | Отправлено: 12:31 08-05-2013 | Исправлено: Alex_Piggy, 12:47 08-05-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alex_Piggy
    Dim - не рекомендуют использовать совсем и уж точно не при первом объявлении переменной. Dim - имеет двусмысленность при определении переменной внутри функции, а при програмировании двусмысленность не друг, фактически я вижу единстенное использование Dim только внутри функции, как пересоздание массива, который объявлен глобально, в остальных случаях Global или Local. Причём официально глобальные переменные в начале скрипта должны быть объявлены как Global, так как они всё равно будут глобальные, но по неофициальным источникам переменные в начале скрипта можно объявить как Local, возможно они не будут в пространстве глобальных имён интерпретатора автоита, но будут будут в глобальном пространстве имён скрипта.
     
    If (условие) Then в этой конструкции скобки не обязательны
     
    Вариант без Scripting.Dictionary - http://pastebin.com/zhh9rHv5 если надо и утилиту могу выложить, я разделил на два варианта, второй не поддерживает регистр букв,  хотя можно преобразовывать с помощью StringToBinary, но скорость уже не будет как в Scripting.Dictionary, потому что функция StringToBinary придётся вызывать в цикле для каждой строки.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 13:19 08-05-2013 | Исправлено: AZJIO, 13:30 08-05-2013
    AZJIO



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

    Цитата:
    Та же логика на Scripting.Dictionary отрабатывает за 2 минуты
    Слишком медленно. На данный момент есть только два наибыстрых варианта: Assign и Scripting.Dictionary. Самый быстрый Assign, но у него проблема с символом [ введена разработчиками для игнорирования переменных массива. Scripting.Dictionary как универсальный вариант более выгодней, проигрыш не большой, зато отсутсвует проблема с символом [, и ещё поддерживает чуствительность при флаге бинарный. Регулярка тоже медленный вариант, даже в рассчёт можно не брать.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 16:32 08-05-2013 | Исправлено: AZJIO, 16:34 08-05-2013
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, прошу Вашей помощи. Пожалуйста, подскажите, как вставить определенный набор символов в начало и конец текстовых строк в текстовом файле. С регулярными выражениями только учусь работать. Буду Вам очень признателен за ценный пример.

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 03:12 09-05-2013
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artem_Butenko,
    Попробуйте так.
    Код:
    $sStr = 'Первая строка' & @LF & 'Вторая строка' & @CRLF & 'Третья строка' & @CRLF & 'И еще строка'; & @CRLF
    $sBegin = 'Begin '
    $sEnd = ' End'
    ConsoleWrite($sStr & @LF)
    $sStr = StringRegExpReplace($sStr, '(?sm)^(.+?)(\r*)$', $sBegin & '$1' & $sEnd & '$2')
    ConsoleWrite('---' & @LF)
    ConsoleWrite($sStr & @LF)

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 11:27 09-05-2013
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
     
    Подскажите, а как быть если текстовых строк в текстовом файле более трех, десяти или двадцати. Скажем их 200. В начало и конец каждой такой строки необходимо добавить определенные символы. При условии, что содержание строк, т.е. какие именно буквенно-цифровые последовательности в них содержатся, нам заведомо неизвестно. Пожалуйста, помогите довести эту задачу до логического решения.
     
    Приведу пример. Дана последовательность строк в текстовом файле:
     
    File.txt
    x64\File_x64.txt
    x64\Folder_x64\File_x64.txt
    x86\File_x86.txt
    x86\Folder_x86\File_x86.txt
     
    Результат обработки данного текстового файла:
     
    Begin File.txt End
    Begin x64\File_x64.txt End
    Begin x64\Folder_x64\File_x64.txt End
    Begin x86\File_x86.txt End
    Begin x86\Folder_x86\File_x86.txt End
     
    В начало каждой строки добавляем, например, "Begin ", а в конец " End".

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 15:19 09-05-2013 | Исправлено: Artem_Butenko, 15:23 09-05-2013
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artem_Butenko
    Цитата:
    а как быть если текстовых строк в текстовом файле более трех, десяти или двадцати. Скажем их 200.  

    Код:
    Local $sFile = @ScriptDir & '\tst.txt', $sText, $iStr = Random(500, 1500, 1), $iStrLen, $hFile, $iEnc, $sBegin = 'Begin ', $sEnd = ' End'
     
    For $i = 1 To $iStr
        $sText &= $i & ' '
        $iStrLen = Random(25, 100, 1)
        For $j = 1 To $iStrLen
            $sText &= Chr(Random(48, 57, 1))
        Next
        $sText &= @CRLF
    Next
     
    $hFile = FileOpen($sFile, 2)
    FileWrite($hFile, $sText)
    FileClose($hFile)
    $sText = ''
    ;===========
    $iEnc = FileGetEncoding($sFile)
    $hFile = FileOpen($sFile, $iEnc)
    $sText = FileRead($hFile)
    FileClose($hFile)
    $sText = StringRegExpReplace($sText, '(?sm)^(.+?)(\r*)$', $sBegin & '$1' & $sEnd & '$2')
    $hFile = FileOpen($sFile & '.tmp', $iEnc + 2)
    FileWrite($hFile, $sText)
    FileClose($hFile)


    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 21:24 09-05-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обновлён Полный комплект справки, зеркало  2013.05.10
    Подробнее...

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 17:27 10-05-2013
    Daniyar91

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Я уже писал про "голландский" язык, ты испрвил, но там ниже таблицы есть пример в котором написано:

    Код:
    Func _Language()  
        Switch @OSLang  
            ...
            Case "0413", "0813"  
                Return "Голландский"  
            ...
    EndFunc

    Надо тоже исправить.

    Всего записей: 425 | Зарегистр. 30-08-2011 | Отправлено: 20:08 10-05-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Daniyar91
    Исправлено, промежуточные версии можно скачать здесь. Кстати подсветил код на жёлтом фоне.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 03:26 13-05-2013
    77599073587



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    подскажите сценарий для расшаривания папки test в win7 с чтением ,  измененением и доступом для всех пользователей . То есть никаких ограничений для общей папки
     
    Добавлено:
    рабочая группа TEST , сеть без домена , обычная локалка

    Всего записей: 31 | Зарегистр. 12-02-2013 | Отправлено: 09:15 14-05-2013
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, прошу помощи. До "реформации" топика madmasles предлагал следующий скрипт:
     

    Код:
    Opt('MustDeclareVars', 1)
     
    Global $sFile = @SystemDir & '\drivers\etc\hosts', $sString = '127.0.0.1 google.com', $fRes
     
    $fRes = _CheckString($sFile, $sString)
    If @error Then Exit @error
    If $fRes Then
    MsgBox(64, 'Info', 'Yes: ' & $sString)
    Else
    $fRes = _AddString($sFile, $sString)
    If @error Then Exit @error
    MsgBox(64, 'Info', 'New string add: ' & $fRes)
    EndIf
    #cs
    $f_CRLF = True - добавит в конце строки перевод строки (@CRLF)
    $f_DelEndEmpty = True - удалит все символы перевода строки в конце текста перед добавлением строки
    #ce
    Func _AddString($s_File, $s_String, $f_CRLF = True, $f_DelEndEmpty = True)
    Local $h_File, $s_Text, $i_Enc, $s_BackUp
    If Not FileExists($s_File) Then Return SetError(-1)
    If Not $s_String Or StringIsSpace($s_String) Then Return SetError(1)
    $s_Text = FileRead($s_File)
    If Not $s_Text Then Return SetError(2)
    $i_Enc = FileGetEncoding($s_File)
    If $i_Enc = -1 Then Return SetError(3)
    $s_BackUp = @ScriptDir & '\' & StringRegExpReplace($s_File, '^.*\\', '') & '.bak'
    If Not FileCopy($s_File, $s_BackUp, 1) Then Return SetError(3)
    $h_File = FileOpen($s_File, $i_Enc + 2)
    If $h_File = -1 Then Return SetError(4)
    If $f_DelEndEmpty Then $s_Text = StringRegExpReplace($s_Text, '([\r\n]*$)', '')
    $s_Text &= @CRLF & $s_String
    If $f_CRLF Then $s_Text &= @CRLF
    $i_Enc = FileWrite($h_File, $s_Text)
    FileClose($h_File)
    If $i_Enc Then
    FileDelete($s_BackUp)
    Else
    If Not FileCopy($s_BackUp, $s_File, 1) Then Return SetError(5)
    ;If Not FileMove($s_BackUp, $s_File, 1) Then Return SetError(5)
    EndIf
    Return ($i_Enc = 1)
    EndFunc ;==>_AddString
     
    Func _CheckString($s_File, $s_String)
    If Not FileExists($s_File) Then Return SetError(-1)
    If Not $s_String Or StringIsSpace($s_String) Then Return SetError(1)
    Local $s_Text = FileRead($s_File)
    If Not $s_Text Then Return SetError(2)
    Return (StringRegExp(@CRLF & $s_Text & @CRLF, '\r\n?(\Q' & $s_String & '\E)\r\n?') <> 0)
    EndFunc ;==>_CheckString

     
    Однако код немножко неисправен. Например, не создается бэкап файла. Пожалуйста, помогите разобраться, что здесь не так.
     
    Добавлено:
    Может у кого-нибудь сохранилась оффлайн версия топика, до удаления сообщений за год?

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 21:00 15-05-2013
    Artem_Butenko



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

    Цитата:
    Artem_Butenko
    Цитата:
    а как быть если текстовых строк в текстовом файле более трех, десяти или двадцати. Скажем их 200.  
     
    Код:
    Local $sFile = @ScriptDir & '\tst.txt', $sText, $iStr = Random(500, 1500, 1), $iStrLen, $hFile, $iEnc, $sBegin = 'Begin ', $sEnd = ' End'
     
    For $i = 1 To $iStr
        $sText &= $i & ' '
        $iStrLen = Random(25, 100, 1)
        For $j = 1 To $iStrLen
            $sText &= Chr(Random(48, 57, 1))
        Next
        $sText &= @CRLF
    Next
     
    $hFile = FileOpen($sFile, 2)
    FileWrite($hFile, $sText)
    FileClose($hFile)
    $sText = ''
    ;===========
    $iEnc = FileGetEncoding($sFile)
    $hFile = FileOpen($sFile, $iEnc)
    $sText = FileRead($hFile)
    FileClose($hFile)
    $sText = StringRegExpReplace($sText, '(?sm)^(.+?)(\r*)$', $sBegin & '$1' & $sEnd & '$2')
    $hFile = FileOpen($sFile & '.tmp', $iEnc + 2)
    FileWrite($hFile, $sText)
    FileClose($hFile)

     
    Обрабатываем текстовый файл "tst.txt" с одной строчкой Hello!, получаем
     
    Ничего теперь не понимаю . Пожалуйста объясните, что не так? По задумке должно быть:
    Begin Hello! End
     
    Содержимое файла "tst.txt.tmp".

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 21:48 16-05-2013 | Исправлено: Artem_Butenko, 21:59 16-05-2013
    SuperDimon007



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
     
    Сделать такую кнопку слишком заморочно на AutoIt?

    Всего записей: 51 | Зарегистр. 12-06-2012 | Отправлено: 17:18 17-05-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SuperDimon007
    Нет не заморочно. В UDF есть примеры с вставной иконки/картинки слева от текста, на худой конец можно всю кнопку сделать картинкой. Смотрите пример в функции _GUICtrlButton_SetImageList. Вот тема

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 17:27 18-05-2013 | Исправлено: AZJIO, 17:30 18-05-2013
    berkut9737



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, есть такая команда в Autoit?
     

    Цитата:
    Установить директорию из которой запущен скрипт, как текущую.

    Всего записей: 1140 | Зарегистр. 05-04-2009 | Отправлено: 12:48 20-05-2013 | Исправлено: berkut9737, 12:49 20-05-2013
    madmasles

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

    Цитата:
    Установить директорию из которой запущен скрипт, как текущую.


    Код:
    ConsoleWrite(@WorkingDir & @LF)
    FileChangeDir(@ProgramFilesDir)
    ConsoleWrite(@WorkingDir & @LF)
    FileChangeDir(@ScriptDir);текущая
    ConsoleWrite(@WorkingDir & @LF)

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 12:58 20-05-2013
    berkut9737



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

     
    Добавлено:
    madmasles
    Когда я копирую файл в директорию @ProgramFilesDir, то он попадает в C:\Program Files (x86), а мне надо, чтобы в C:\Program Files (система у меня х64). Есть решение? Спасибо.
     

    Код:
    FileCopy ( @DesktopDir & "\009\test.exe", @ProgramFilesDir &"\008", 1 )

     
    Я нашёл такое решение:
     

    Код:
    FileCopy ( @DesktopDir & "\009\test.exe", "C:\Program Files\008", 1 )

    Всего записей: 1140 | Зарегистр. 05-04-2009 | Отправлено: 13:02 20-05-2013 | Исправлено: berkut9737, 13:37 20-05-2013
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

    Компьютерный форум 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