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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В шапке исправлена ссылка на Form Builder: автор убрал файл с обменника, ссылка заменена на ссылку на первую страницу темы, файл в аттаче внизу первого поста.

    Всего записей: 6596 | Зарегистр. 28-01-2008 | Отправлено: 18:36 26-05-2014
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
     
    Привожу пример "*.ini-файла"
     
    Условие: требуется целиком удалить строки в которых есть совпадения по маске: MODPLUG, 7-ZIP.
     
    Тогда "*.ini-файл" примет следующий вид.
     
    Собственно и все. Структуру "*.ini-файла" до и после изменений я привел. Пожалуйста, помогите разобраться с вопросом.

    Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 09:59 27-05-2014 | Исправлено: Artem_Butenko, 10:01 27-05-2014
    NIKZZZZ



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

    Код:
    $sIniFileName = "1.ini"
    $sNewIniFileName = "result.ini"
    $sMask = "(?mi)^.*(?:MODPLUG|7-ZIP).*$\s*"
     
    $sIniFile = FileRead($sIniFileName)
    ;FileDelete($sIniFileName)
    $sIniFile = StringRegExpReplace($sIniFile, $sMask,'')
    FileWrite($sNewIniFileName, $sIniFile)


    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 10:36 27-05-2014
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
     
    Спасибо, скажите, можно ли редактировать файл в памяти, не создавая новый "*.ini-файл"?

    Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 10:56 27-05-2014
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artem_Butenko
    Не понял, он и редактируется в памяти, новый файл создается только для отладки.
     

    Код:
    $sIniFileName = "1.ini"
    $sMask = "(?mi)^.*(?:MODPLUG|7-ZIP).*$\s*"
    $sIniFile = FileRead($sIniFileName)
    FileDelete($sIniFileName)
    $sIniFile = StringRegExpReplace($sIniFile, $sMask,'')
    FileWrite($sIniFileName, $sIniFile)  

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 11:05 27-05-2014 | Исправлено: NIKZZZZ, 11:05 27-05-2014
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
     
    Прошу прощения с ходу не понял. Еще раз большое Вам спасибо.

    Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 11:23 27-05-2014
    Artem_Butenko



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

    Цитата:
    Код:
    $sIniFileName = "1.ini"  
    $sMask = "(?mi)^.*(?:MODPLUG|7-ZIP).*$\s*"  
    $sIniFile = FileRead($sIniFileName)  
    FileDelete($sIniFileName)  
    $sIniFile = StringRegExpReplace($sIniFile, $sMask,'')  
    FileWrite($sIniFileName, $sIniFile)

     
    Протестировал, удачно справляется с текстом в кодировке ANSI, а вот с Unicode UTF-16 LE работать отказывается.
     
    Добавлено:
    Похоже, необходимо, правильно переконвертировать текст?

    Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 16:25 27-05-2014
    NIKZZZZ



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

    Код:
    $sIniFileName = "Layout.ini"
    $sMask = "(?mi)^.*(?:MODPLUG|7-ZIP).*$\s*"
    ;$iEncoding = FileGetEncoding($sIniFileName) ; автоматическое определение кодировки, в твоем примере Layout.ini не имеется BOM сигнатуры, кодировку надо указать вручную.
    ;Success: the file encoding using similar values to the FileOpen() function:
    ;    0 = ANSI
    ;    32 = UTF16 Little Endian.
    ;    64 = UTF16 Big Endian.
    ;    128 = UTF8 (with BOM).
    ;    256 = (without BOM).
    $iEncoding = 256 + 32 ;UTF16 Little Endian  without BOM
    $hFile = FileOpen($sIniFileName, $iEncoding)
    $sIniFile = FileRead($hFile)
    FileClose($hFile)
     
    $sIniFile = StringRegExpReplace($sIniFile, $sMask, '')
     
    $hFile = FileOpen($sIniFileName,$iEncoding+2)
    FileWrite($hFile, $sIniFile)
    FileClose($hFile)
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 20:37 27-05-2014 | Исправлено: NIKZZZZ, 20:39 27-05-2014
    Artem_Butenko



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

    Цитата:
    $sIniFileName = "Layout.ini"  
    $sMask = "(?mi)^.*(?:MODPLUG|7-ZIP).*$\s*"  
    ;$iEncoding = FileGetEncoding($sIniFileName) ; автоматическое определение кодировки, в твоем примере Layout.ini не имеется BOM сигнатуры, кодировку надо указать вручную.  
    ;Success: the file encoding using similar values to the FileOpen() function:  
    ;    0 = ANSI  
    ;    32 = UTF16 Little Endian.  
    ;    64 = UTF16 Big Endian.  
    ;    128 = UTF8 (with BOM).  
    ;    256 = (without BOM).  
    $iEncoding = 256 + 32 ;UTF16 Little Endian  without BOM  
    $hFile = FileOpen($sIniFileName, $iEncoding)  
    $sIniFile = FileRead($hFile)  
    FileClose($hFile)  
     
    $sIniFile = StringRegExpReplace($sIniFile, $sMask, '')  
     
    $hFile = FileOpen($sIniFileName,$iEncoding+2)  
    FileWrite($hFile, $sIniFile)  
    FileClose($hFile)

     
    После обработки файла, получаем следующий результат. Указанные строки не удаляются, между символами добавляется пробел, строки сливаются.

    Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 13:21 28-05-2014
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ,
    ИМХО, у Вас ошибка в строке
    Код:
    $iEncoding = 256 + 32
    Нет такого флага в функции FileOpen

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 17:32 28-05-2014 | Исправлено: madmasles, 17:35 28-05-2014
    Artem_Butenko



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

     
    Спасибо Вам огромное ребята, скрипт поправил, теперь все работает!
     
    Конечный скрипт

    Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 18:07 28-05-2014 | Исправлено: Artem_Butenko, 18:13 28-05-2014
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artem_Butenko,
    Я бы использовал
    Код:
    $iEncoding = FileGetEncoding($sIniFileName)

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



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

    Цитата:
    Я бы использовал
    Код:
    $iEncoding = FileGetEncoding($sIniFileName)

     
    Пожалуйста, можно об этом подробнее.
     
    Ребята, вопрос всем, можно ли узнать из AutoIt скрипта путь к исполняемому файлу, который в свою очередь запускает скомпилированный скрипт AutoIt. Иначе говоря схема такова: исполняемый файл "MyProgram.exe" распаковывает и запускает скомпилированный скрипт AutoIt ("MyProgramAutoIt.exe"). Из AutoIt скрипта ("MyProgramAutoIt.exe") узнаем путь к файлу "MyProgram.exe" и записываем этот путь в переменную, обрезая в конце пути "\MyProgram.exe".
    Т.е., если полный путь к файлу "MyProgram.exe" будет таков "C:\Program_Test\MyProgram.exe", то записанный в переменную путь, должен быть таким "C:\Program_Test\". Актуально, но как это реализовать даже не представляю.

    Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 09:52 29-05-2014 | Исправлено: Artem_Butenko, 10:09 29-05-2014
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artem_Butenko
    Можно запускать MyProgramAutoIt.exe с параметром

    Код:
    Run('MyProgramAutoIt.exe "' & @ScriptDir & '\"')

    В код MyProgramAutoIt.exe добавить в начале

    Код:
    $path = $CmdLine[1]

     
    По хорошему, наверное, добавить проверку

    Код:
    If $CmdLine[0] = 0 Then
        MsgBox(4096, "MyProgramAutoIt.exe", "Отсутствуют параметры запуска")
    ElseIf $CmdLine[0] = 1 Then
        $path = $CmdLine[1]
    Else
        MsgBox(4096, "MyProgramAutoIt.exe", "Параметров запуска больше, чем надо")
    EndIf

     
     

    Всего записей: 6596 | Зарегистр. 28-01-2008 | Отправлено: 16:55 29-05-2014 | Исправлено: Skif_off, 17:37 29-05-2014
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
     
    Ого. Т.е. немного непонятно. Поясните пожалуйста.

    Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 17:19 29-05-2014
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artem_Butenko
    В сообщении была ошибка, сейчас исправил, прошу прощения
    Здесь поподробнее про запуск.

    Всего записей: 6596 | Зарегистр. 28-01-2008 | Отправлено: 17:34 29-05-2014
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
     
    Ага, спасибо, прочитал. Только вот первая программа, которая запускает скомпилированный AutoIt скрипт, - это самораспаковывающийся архив. Из запущенного AutoIt скрипта, необходимо узнать путь к этому SFX-архиву и записать его в переменную. Как-то так.

    Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 17:40 29-05-2014
    Skif_off

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

    Цитата:
    это самораспаковывающийся архив.

    Понятно, я подумал, что используется функция FileInstall. Собственно, это не многое меняет: нужно просто запустить MyProgramAutoIt.exe с параметром, какой архиватор используется для создания SFX?

    Всего записей: 6596 | Зарегистр. 28-01-2008 | Отправлено: 17:44 29-05-2014
    dialmak



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

    Цитата:
    Только вот первая программа, которая запускает скомпилированный AutoIt скрипт, - это самораспаковывающийся архив. Из запущенного AutoIt скрипта, необходимо узнать путь к этому SFX-архиву и записать его в переменную. Как-то так.

    А какой конкретно архив? Если этот архив 7z, то это легко решаемо переменными среды.
    Поробнее тут http://7zsfx.info/ru/
     
    Добавлено:
    Например такой конфиг для архива

    Код:
    ;!@Install@!UTF-8!
    SetEnvironment="exepath=%%S"
    RunProgram="my.exe"
    ;!@InstallEnd@!

    А из my.exe прочитать переменную %exepath%. Как то так. Впрочем может задачу недопонял

    Всего записей: 14007 | Зарегистр. 27-04-2013 | Отправлено: 17:55 29-05-2014 | Исправлено: dialmak, 17:56 29-05-2014
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    7z-SFX было бы самое оно, да:
    внутренняя переменная %%S - полный путь к файлу SFX архива (только в конфиге работает), если используется %TEMP%, то что-то вроде этого

    Код:
    InstallPath="%TEMP%"
    RunProgram="%TEMP%\\MyProgramAutoIt.exe "%%S\""

    Тогда в скрипт MyProgramAutoIt.exe добавить в начале

    Код:
    $path = $CmdLine[1]

    Ну или цикл с проверкой, что запуск произошел с параметром.
     
    Добавлено:
    Забыл обновить страницу перед отправкой
     
    dialmak, а нельзя использовать переменную в строке запуска? %%T используется, я подумал, что и %%S развернет.

    Всего записей: 6596 | Зарегистр. 28-01-2008 | Отправлено: 18:07 29-05-2014 | Исправлено: Skif_off, 18:09 29-05-2014
       

    Страницы: 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