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

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Совсем далек от программирования. Нужно добавить в скрипт  конструкцию, которая при запуске проверяла бы не запущен ли процесс (скомпилированный скрипт). Если да - прибивала бы его (запускала бы его с определенным ключем).
     
    Добавлено:
    AZJIO
    Большое спасибо!

    Всего записей: 1955 | Зарегистр. 29-06-2011 | Отправлено: 23:49 28-05-2013 | Исправлено: inile, 07:14 29-05-2013
    AZJIO



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

    Код:
    #include <File.au3>
     
    Local $aFoldersList ; Массив, куда будут вставлены данные.
    If Not _FileReadToArray(@ScriptDir & "\FoldersList.txt", $aFoldersList) Then
        MsgBox(4096, "Ошибка", " Ошибка чтения файла в массив     Ошибка = " & @error)
        Exit
    EndIf

     
    ; Цикл создаёт каталоги
    For $i = 1 To $aFoldersList[0]
        DirCreate(@TempDir & '\' & $aFoldersList[$i])  
    Next
     
    Local
    $aFilesList ; Массив, куда будут вставлены данные.
    If Not _FileReadToArray(@ScriptDir & "\FilesList.txt", $aFilesList) Then
        MsgBox(4096, "Ошибка", " Ошибка чтения файла в массив     Ошибка = " & @error)
        Exit
    EndIf

     
    ; Цикл вставляет файлы
    For $i = 1 To $aFilesList[0]
       
    Next

     
    inile
    ProcessExists - Проверяет, существует ли указанный процесс.
    Возвращает PID, используя который можно убить процесс
    ProcessClose - Завершает процесс с указанным именем или PID.
    ProcessWaitClose - Приостанавливает выполнение скрипта до тех пор, пока указанный процесс не перестанет существовать.
    После этого можно запускать новый через Run
    Run - Выполняет запуск других программ.

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 06:37 29-05-2013 | Исправлено: AZJIO, 19:40 29-05-2013
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
     
    Спасибо Вам большое за ценный скрипт. Обидно только не получается запустить компиляцию из-за "FileInstall". Ошибка на 22 строке. Еще не совсем понимаю, как записать полученные в массив результаты в текстовый файл?

    Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 11:33 29-05-2013
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Цитата:
    Примерно так
    Так FileInstall() не будет работать.

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
     
    Получается, тогда подобный алгоритм не осуществим средствами AutoIt? Все что необходимо, это преобразование в текстовом файле результатов поиска структуры каталогов и относительных путей файлов.
     
    Например, имеется текстовый файл "FoldersList.txt". Данный файл содержит полную структуру всех папок в определенном каталоге. Пример содержание данного файла. Желаемый вариант содержания "FoldersList.txt" после обработки должен выглядеть так.
     
    Имеется текстовый файл "FilesList.txt". Данный файл содержит относительные пути ко всем файлам в целевой папке и всех ее подпапках. Пример содержание данного файла. Желаемый вариант содержания "FilesList.txt" после обработки должен выглядеть так.
     
    Я уже совсем запутался. Помогите, пожалуйста справиться с данной задачей.

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    Не проверял, верю.
     
    Artem_Butenko
    Если файл компилируется, то всё можно указать явно. Зачем брать из внешнего файла?

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 19:33 29-05-2013
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
     
    Мне так удобнее, получить список всех "DirCreate" и "FileInstall" и подключать их как инклюды. Спасибо Вам огромное за программу "Create List Files". С её помощью научился добавлять файлы для функции "FileInstall". Вот строка из конфигурационного файла. Жалко, что получить список каталогов в Вашей утилите, как я понял пока нельзя?

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artem_Butenko,
    Попробуйте примерно так.
    Код:
    Local $sFileFrom = @ScriptDir & '\FilesList.txt', $sFileTo = @ScriptDir & '\FilesList.au3', $sDirFrom = '.\Resources', _
            $sFolderFrom = @ScriptDir & '\FoldersList.txt', $sDirFrom = '.\Resources', $sDirTo = '@TempDir', _
            $sText, $aText, $sTextAu3, $hFile
     
    $sText = FileRead($sFolderFrom)
    $aText = StringSplit(StringStripCR($sText), @LF)
    $sTextAu3 = '#include-once' & @CRLF
    For $i = 1 To $aText[0]
        If Not $aText[$i] Or StringIsSpace($aText[$i]) Then ContinueLoop
        $sTextAu3 &= 'If Not DirCreate(' & $sDirTo & '&''\' & StringStripWS($aText[$i], 4) & ''') Then Exit 1' & @CRLF
    Next
    $sText = FileRead($sFileFrom)
    $aText = StringSplit(StringStripCR($sText), @LF)
    For $i = 1 To $aText[0]
        If Not $aText[$i] Or StringIsSpace($aText[$i]) Then ContinueLoop
        $sTextAu3 &= 'If Not FileInstall(''' & $sDirFrom & '\' & StringStripWS($aText[$i], 4) & ''',' & $sDirTo & '&''\' & $aText[$i] & ''',1) Then Exit 2' & @CRLF
    Next
    $hFile = FileOpen($sFileTo, 2)
    FileWrite($hFile, $sTextAu3)
    FileClose($hFile)
    Подробнее см. код ViSiToR`a.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 06:36 30-05-2013 | Исправлено: madmasles, 06:37 30-05-2013
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO, madmasles, ViSiToR
     
    Спасибо Вам огромное ребята! Скрипт полностью готов и работает! Думаю пригодится пользователям и такой вариант оптимизации добавления файлов в "FileInstall".
     
    Структура конфигурационного файла "Config.ini" такова.
     
    Спасибо еще раз Вам всем ребята, без Вас ничего бы у меня не получилось.

    Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 12:26 30-05-2013
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, еще раньше написал скрипт для сборки "первично-портативных" приложений в один файл. Очень благодарен за большую часть наработок madmasles, особенно за модуль проверки контрольных сумм файлов (MD5-хеша). AZJIO и Вам еще раз спасибо за Вашу программу "Create List Files", с помощью которой и составляется список файлов и их контрольных сумм, разделитель "=". Привожу пример данного скрипта, на основе бесплатной портабельной версии приложения MKVToolNix. Подключаемые модули ("инклюды") из каталога "Includes":
    - CheckAllFiles.au3;
    - FileInstallList.au3;
    - ProcessWaitCloseList.au3.
    Содержание конфигурационного файла "MD5CheckSum.ini".
     
    Скрипт обильно снабжен комментариями, таким образом разобраться будет не сложно. Прошу только не ругайте сильно, за имена переменных.

    Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 20:30 31-05-2013 | Исправлено: Artem_Butenko, 20:46 31-05-2013
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    comrades, прошу прощения, если где-то расжевано, не нашел. С помощью участников ветки сделал скрипт, возникла мысль сделать его самодостаточным: в начале скрипта идет #include <File.au3>, вытащил из File.au3 используемую функцию _TempFile и вставил в начале своего скрипта, File.au3 включает в себя #include "FileConstants.au3", но ни одна из Global Const не используется в функции _TempFile - проигнорировал, получилось так. Все правильно? И все делается так же и для более сложных скриптов? На оффоруме видел скрипты, где функция помещалась в конце.

    Всего записей: 6596 | Зарегистр. 28-01-2008 | Отправлено: 23:24 05-06-2013 | Исправлено: Skif_off, 23:25 05-06-2013
    j52

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

    Цитата:
    И все делается так же и для более сложных скриптов?

    ИМХО, и для более сложных скриптов я использовал утилитку-препроцессор Au3PP (есть в шапке, в инструментах).
    Она как-раз автоматизирует все эти действия - вносит из includ-ов в тело скрипта только необходимые ф-ции и константы... (и не только это). И, кстати, помещает их в конец скрипта...

    Всего записей: 534 | Зарегистр. 05-05-2004 | Отправлено: 00:34 06-06-2013 | Исправлено: j52, 00:34 06-06-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    j52
    Au3PP устарел, вместо него используется обфускатор, который не делает ошибок, кроме проблемных для него функций, о чём сказано в справке.
     
    Skif_off
    Добавь директивы в скрипт и компилируй с помощью AutoIt3Wrapper, только убери строку, которая удаляет обфуцированный скрипт. Описание команд есть в справке. После обфускации в скрипт будут вставлены константы и функции которые необходимы скрипту.
     
    Функции можно в любом месте, обычно в конец скрипта, а константы в начале.

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 00:44 06-06-2013
    j52

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

    Цитата:
    Au3PP устарел

    - и я, вместе с ним... (не зря написал в прошедшем времени "я использовал")

    Цитата:
    вместо него используется обфускатор, который не делает ошибок

    Это с этими опциями /sf=1 /sv=1 ??

    Всего записей: 534 | Зарегистр. 05-05-2004 | Отправлено: 01:16 06-06-2013
    Skif_off

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

    Цитата:
    Функции можно в любом месте, обычно в конец скрипта, а константы в начале.

    Это неожиданно Подумал, что сначала задаем, потом оперируем.

    Цитата:
    Добавь директивы в скрипт и компилируй с помощью AutoIt3Wrapper, только убери строку, которая удаляет обфуцированный скрипт.

    Спасибо, добавлю только /sf /sv /cv=0 /cf=0 /cs=0 /cn=0 /sf=1 /sv=1, чтобы оставить родные имена.
     
    Правильно понимаю, что достаточно распаковать SciTE4AutoIt3.zip в Program Files\AutoIt3\SciTE\ с заменой файлов?
     
    Добавлено:
    При использовании AutoIt3Wrapper почему-то игнорируется галочка Use UPX

    Всего записей: 6596 | Зарегистр. 28-01-2008 | Отправлено: 01:21 06-06-2013 | Исправлено: Skif_off, 02:48 06-06-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обновил ButtonBar. Добавил перетаскивания кнопок на панели, чтобы раскладывать в нужном порядке.

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 15:27 08-06-2013 | Исправлено: AZJIO, 03:13 09-06-2013
    Astra55



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

    ----------
    Per warez ad scientiam

    Всего записей: 11717 | Зарегистр. 16-05-2003 | Отправлено: 12:59 09-06-2013
    U235

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Не пробовал, но как-то так:
    Код:
    #NoTrayIcon
     
    Global Const $lciWM_SYSCommand = 274
    Global Const $lciSC_MonitorPower = 61808
    Global Const $lciPower_Off = 2
    Global Const $lciPower_On = -1
     
    Global $MonitorIsOff = False
     Global $Swith = False  
     
     HotKeySet("+!^{PAUSE}", "_Monitor_SWITH")
    HotKeySet("+!^{Esc}", "_Quit")
     
    MsgBox(64, "Monitor On/Off", "Press Ctrl+Alt+Shift+Pause to turn off/on the monitor." & @LF & _
                                                           "Press Ctrl+Alt+Shift+Esc to turn on the monitor and exit program.")
     
    While 1
        Sleep(10)
    WEnd
     
     Func _Monitor_SWITH()
      If   $Swith  Then  
       _Monitor_ON
        $Swith=False
       Else  
       _Monitor_OFF
        $Swith=True
        EndIf
    EndFunc
     
    Func _Monitor_ON()
        $MonitorIsOff = False
        Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]')
         
        DllCall('user32.dll', 'int', 'SendMessage', _
                                                    'hwnd', $Progman_hwnd, _
                                                    'int', $lciWM_SYSCommand, _
                                                    'int', $lciSC_MonitorPower, _
                                                    'int', $lciPower_On)
    EndFunc
     
    Func _Monitor_OFF()
        $MonitorIsOff = True
        Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]')
         
        While $MonitorIsOff = True
            DllCall('user32.dll', 'int', 'SendMessage', _
                                                        'hwnd', $Progman_hwnd, _
                                                        'int', $lciWM_SYSCommand, _
                                                        'int', $lciSC_MonitorPower, _
                                                        'int', $lciPower_Off)  

    Всего записей: 980 | Зарегистр. 14-12-2005 | Отправлено: 14:37 09-06-2013 | Исправлено: U235, 14:39 09-06-2013
    Astra55



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    U235
    Спасибо, но пока ругается:
    ---------------------------
    Line 17  (File "C:\1\TurnOffMonitor.au3"):
    _Monitor_ON
    _Monitor_ON^ ERROR
    Error: Missing separator character after keyword.
    ---------------------------
    Я убрал пустые строки, поэтому строка 17.

    ----------
    Per warez ad scientiam

    Всего записей: 11717 | Зарегистр. 16-05-2003 | Отправлено: 15:41 09-06-2013
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Astra55 -- после названия функции должны идти круглые скобки, в которых при необходимости перечисляются аргументы вызова. Т.е. вызов функции должен выглядеть так:  

    Код:
    _Monitor_ON()
     _Monitor_OFF()


    Всего записей: 3267 | Зарегистр. 30-05-2007 | Отправлено: 16:44 09-06-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