Loopback
|
Posted: Sun May 31, 2020 20:53 Post subject: |
|
|
Новая версия. Даже не знаю - бета это или альфа... Самые глобальные изменения за последние семь лет Пока называю 2.2.x, но вероятнее всего, это будет 2.5 или 3.0.
Список изменений:
Унифицированы интерфейсы команд - внутренних и экспортируемых из плагинов (внутреннее изменение, оптимизация)
Парсер переписан с нуля, с учетом сохранения совместимости
Соответственно, переписаны условия If..Else..Endif, добавлена возможность однострочного If .. Then
Добавлены циклы For и While
Code: | For var = 1 To 5 [Step x]
...
Next
While var > 0
...
Wend |
Ключевые слова для управления выполнением (break, continue, return)
Добавлены пользовательские функции
Code: | Func FuncName([ByRef] var1, var2, var3 = 1)
...
EndFunc |
Переменные в функциях локальны
Добавлено присваивание переменной
Поддержка разделения на строки с символом "_" в конце
Code: | var = expression_1 + _
expression_2 - _
expression_N |
Поддержка загрузки подключаемых файлов (includes)
Code: | Pragma Include "path_to_include" (алгоритм аналогичен LoadLibrary, но работают только переменные окружения) |
В подключаемых файлах можно использовать Pragma IncludeOnce
В выражениях можно использовать переменные без %%
В целом, совместимость со старыми скриптами сохраняется. Если команда/функция находится в начале строки (без присваивания), то Autorun их различает по наличию "(" после имени. Если вдруг понадобится запустить "старую" команду, где первый символ после имени должен быть скобкой, ее можно просто взять в кавычки.
Code: | MsgBox 123 Title - OK
MsgBox("123", "Title") - OK
|
А вот в присваивании в правой части писать команды "старым" методом нельзя.
Code: | ex = FileExist "c:\Total\NoClose.exe" - работать не будет
ex = FileExist("c:\Total\NoClose.exe") - ОК |
Синтаксис %"expression" используется только в параметрах команд старого типа.
На моей рабочей конфигурации всё заработало без модификаций. Тем не менее, есть некоторые вынужденные (или желательные с точки зрения оптимизации) изменения, которые могут повлиять на работоспособность имеющихся конфигураций:
- Убрана команда AutorunBlockUnload(YES), которая оставалась с древних времен для совместимости, оставлена только Pragma AutorunBlockUnload.
- Убран старый синтаксис FileExists в условиях, можно легко переписать FileExists "file" -> FileExists("file") (имя должно быть в кавычках). Реально, тут было слишком много лишнего кривого кода ради одной функции.
- Убрана директива AutorunAllowWriteEnv, я ее и раньше считал невразумительным костылем, а в новом коде она вообще нормально не ложится.
- Еще не убрана, но есть желание убрать директиву AutorunLoadInSubrocess, все же сомневаюсь, что кому-то может понадобиться загружать Autorun повторно в процессе, например, поиска. А сейчас, с учетом подключаемых файлов, поиск этой директивы может быть уже не так безболезнен как раньше.
В целом, как оказалось, оба подхода вполне могут мирно сосуществовать, у каждого есть свои плюсы и минусы. Некоторые сложные команды, например ControlSetMouseAction или AddContol, без использования переключателей были бы весьма громоздкими и неудобными в задании параметров. В то же время для строчных команд лучше подходит функциональный синтаксис.
По получившемуся результату мне не нравится единственный момент - передача переключателей в функции через специальный первый параметр ("~/S /N ..."), для обычных команд еще терпимо, но вот для строчных как-то это совсем не очень. Наверно, придется немного переделать.
Справка еще не обновлялась, поэтому достаточно подробно расписал пока здесь, возможно, что-то еще будет меняться. У тех, кто знаком с Autoit, проблем с синтаксисом не будет
Правил-правил, в итоге скопировал старый вариант Обновил, последний раз, если что осталось - потом. |
|