Скриптинг на AUTOIT
|
|
asmadeus | Дата: Понедельник, 16.12.2013, 16:44 | Сообщение № 1 |
|
Скриптинг на AUTOIT
Тема для вопросов и ответов по написанию скриптов на autoit'e - стремительно набирающем популярность языке автоматизации выполнения рутинных дел при работе на компьютере.
Сообщение отредактировал asmadeus - Суббота, 01.02.2014, 23:01 |
|
| |
asmadeus | Дата: Суббота, 01.02.2014, 23:09 | Сообщение № 2 |
|
Всем здравствуйте! Приходится спрашивать, раз не знаю... Итак, имеется скрипт на autoit. Довольно немаленький как на мой взгляд - около 5000 строчек. Хочется сделать как то так - функции и элементы управления раскинуть по модулям тематическим (всего три). Как начать такую операцию)? Я думаю, надо три файла с функциями и контролами(если возможно) и один типа главный - где все это будет вызываться. Или я не прав? Натолкните на правильную мысль!
Сообщение отредактировал asmadeus - Суббота, 01.02.2014, 23:14 |
|
| |
Andrey_A | Дата: Суббота, 01.02.2014, 23:42 | Сообщение № 3 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7179
Награды: 141
Репутация: 125
Аверин Андрей
|
Цитата asmadeus ( ![Ссылка на цитируемый текст](http://tc-image.3dn.ru/Image/Site8/lastpost.gif) ) Хочется сделать как то так - функции и элементы управления раскинуть по модулям тематическим
Раскидать можно по разному. К примеру, в скрипте TCIMG.au3 18.000 чистых строк после обфускации, а в рабочем виде 30.000 (включая комментарии и тестовые функции)
Естественно когда-то встал вопрос о распределении всего этого по полочкам.
Для меня стала удобной разбивка на 6 файлов:
TCIMG.au3 - основа, функции всех команд
TCIMGP.au3 - файл всех функций параметров утилиты
TCIMGL.au3 - куда входят все функции, связанные со строками, парсингом, чтением из файлов
TCIMGPlus.au3 - функции DLL
TCIMGT.au3 - функции, связанные с Total Commander и с окнами
TCIMGE.au3 - тестовые куски кода
Цитата asmadeus ( ![Ссылка на цитируемый текст](http://tc-image.3dn.ru/Image/Site8/lastpost.gif) ) где все это будет вызываться.
в TCIMG.au3 прописано
Код #include "TCIMGL.au3" #include "TCIMGT.au3" #include "TCIMGP.au3" #include "TCIMGPlus.au3" #include "TCIMGE.au3"
Скрипты должны быть в той же папке
[ps]Не забывайте делать комментарии в скрипте[/ps]
|
|
| |
asmadeus | Дата: Суббота, 01.02.2014, 23:50 | Сообщение № 4 |
|
Andrey_A, о, попался знающий человек. В моем случае - я сказал три файла -модуля и четвертый основа. В связи с этим еще вопрос - если отказаться от стандартных include (насколько я знаю, ты работаешь по такому принципу), то мне надо забирать функции из них мне нужные и вставлять в каждый модуль, где нужен их вызов? То есть будет повтор?Создание контролов будет только в основе ведь? В дополнительных файлах только функции? Если до всего дойду, то начну раскидывать
|
|
| |
Andrey_A | Дата: Воскресенье, 02.02.2014, 00:46 | Сообщение № 5 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7179
Награды: 141
Репутация: 125
Аверин Андрей
|
Цитата asmadeus ( ![Ссылка на цитируемый текст](http://tc-image.3dn.ru/Image/Site8/lastpost.gif) ) если отказаться от стандартных include Новичку не рекомендую от этого отказываться...
Я не использую include (в стандартном виде как во всех примерах) по ряду причин:
1. Не правильно работает обфускатор и компилятор при разной кодировке (у меня скрипты в UTF-8 без BOM а в include в ANSI 1251)
2. При include обфускатор вставляет в код кучу "мусора" (ненужных констант...)
3. Повторяющиеся блоки в различных функциях
4. В самих include-функциях тоже хватает "мусора": - излишние многоразовые проверки, когда можно проверить один раз и передать в функцию - старые записи в виде:
Код If $a=1 Then $b=2 EndIf
когда можно записать:
или:
Код Func _xxx() If $a=1 Then Return 0 Else Return 1 EndIf EndFunc
когда можно:
Код Func _xxx() If $a=1 Then Return 0 Return 1 EndFunc
или вобще в одну строку в более новых версиях
Код Func _xxx() Return $a=1 ? 0 : 1 EndFunc
и подобных примеров много (swich, а не select)...
5. Малофункциональные функции (масло масленое)
6. Часть пользовательских функций настолько медленные, что просто ужас. ... (конечно это относится не ко всему - есть просто уникально быстрые и интересные) ------------------------------------------ Поэтому почти сразу от include напрямую отказался. И просто так ко мне в скрипт функция не попадёт, а проходит тестовый файл. Недавно делал новую команду... на просторах инета нашёлся приблизительный код, который включал include, а в чистом виде выходил 1200 строк - но при внимательном подходе и созданием своих многофункциональных функций вышло всего 438 строк...
------------------------------------------ Если нет желания так тщательно возится, то и не стоит браться... просто используйте стандартные примеры.
Цитата asmadeus ( ![Ссылка на цитируемый текст](http://tc-image.3dn.ru/Image/Site8/lastpost.gif) ) надо забирать функции из них мне нужные и вставлять в каждый модуль, где нужен их вызов? То есть будет повтор?
Если цель просто избавится от записей типа #include <Array.au3> ... и вытащить все функции в скрипт, то овчинка выделки не стоит, более того в будущем при добавлении новых общих функций будет каких-то не хватать и их надо в ручную (или автоматически) вставлять в код
------------------------------------------ Если же цель уменьшения кода за счёт объединения блоков, массивов, переменных... то вытащить всю подноготную просто: Обфускатор по минимуму + Todo + тщательная работа над каждым блоком/функциями
|
|
| |
asmadeus | Дата: Воскресенье, 02.02.2014, 00:52 | Сообщение № 6 |
|
то есть ты не советуешь такое? я понял правильно?
|
|
| |
Andrey_A | Дата: Воскресенье, 02.02.2014, 00:59 | Сообщение № 7 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7179
Награды: 141
Репутация: 125
Аверин Андрей
|
Цитата asmadeus ( ![Ссылка на цитируемый текст](http://tc-image.3dn.ru/Image/Site8/lastpost.gif) ) правильно? Правильно... не рекомендую.
|
|
| |
asmadeus | Дата: Воскресенье, 02.02.2014, 01:02 | Сообщение № 8 |
|
Цитата Andrey_A ( ![Ссылка на цитируемый текст](http://tc-image.3dn.ru/Image/Site8/lastpost.gif) ) [КОД:] Выделить весь код Func _xxx() If $a=1 Then Return 0 Else Return 1 EndIf EndFunc когда можно: [КОД:] Выделить весь код Func _xxx() If $a=1 Then Return 0 Return 1 EndFunc
а этого я не знал.... стыдно... на сколько же строк теперь можно код уменьшить))
|
|
| |
Andrey_A | Дата: Воскресенье, 02.02.2014, 01:08 | Сообщение № 9 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7179
Награды: 141
Репутация: 125
Аверин Андрей
|
Цитата asmadeus ( ![Ссылка на цитируемый текст](http://tc-image.3dn.ru/Image/Site8/lastpost.gif) ) не знал В справке к Autoit есть раздел "Обучение" "Аккуратность скрипа" "Как правильно создать условие If ... Then"
|
|
| |
asmadeus | Дата: Воскресенье, 22.06.2014, 10:39 | Сообщение № 10 |
|
андрей, привет! Стал нужен вот такой Калькулятор систем, только в оффлайновом режиме. Сайт то я сохранил для оффлайна, но он порядка 150 метров весит. Натолкни на правильную мысль написания шедевра...Чтобы я с самого начала не стал косячить
|
|
| |
inscriptor | Дата: Воскресенье, 22.06.2014, 17:20 | Сообщение № 11 |
Рядовой
На сайте с: 22.06.2014
Сообщений: 5
|
asmadeus,
Цитата asmadeus Сайт то я сохранил для оффлайна, но он порядка 150 метров весит чем и как сохраняли?
Цитата asmadeus только в оффлайновом режиме а чем вас не устраивает моя онлайновая версия? =)
|
|
| |
asmadeus | Дата: Понедельник, 23.06.2014, 17:57 | Сообщение № 12 |
|
Цитата inscriptor ( ![Ссылка на цитируемый текст](http://tc-image.3dn.ru/Image/Site8/lastpost.gif) ) чем и как сохраняли?
Сохранял Offline explorer, простите, точные настройки не припомню
Цитата inscriptor ( ![Ссылка на цитируемый текст](http://tc-image.3dn.ru/Image/Site8/lastpost.gif) ) а чем вас не устраивает моя онлайновая версия? =)
Почему сразу не устраивает? Просто не всегда интернет при себе, а есть подозрение, что вес оффлайна заметно можно уменьшить
|
|
| |
Andrey_A | Дата: Вторник, 24.06.2014, 07:56 | Сообщение № 13 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7179
Награды: 141
Репутация: 125
Аверин Андрей
|
Цитата asmadeus ( ![Ссылка на цитируемый текст](http://tc-image.3dn.ru/Image/Site8/lastpost.gif) ) Натолкни на правильную мысль написания шедевра.. Что касается GUI окна там должно быть просто - при выборе системы обновляется окно с необходимыми данными, которые созданы в виде шаблонов
Остаётся рассчитать/выяснить условия подсчёта той или иной системы.
|
|
| |
asmadeus | Дата: Вторник, 24.06.2014, 13:30 | Сообщение № 14 |
|
Цитата Andrey_A ( ![Ссылка на цитируемый текст](http://tc-image.3dn.ru/Image/Site8/lastpost.gif) ) которые созданы в виде шаблонов с этого места подробнее....что за шаблоны?
|
|
| |
Andrey_A | Дата: Вторник, 24.06.2014, 17:43 | Сообщение № 15 |
Генералиссимус
На сайте с: 26.01.2012
Город: Сочи, Хоста
Сообщений: 7179
Награды: 141
Репутация: 125
Аверин Андрей
|
Цитата asmadeus ( ![Ссылка на цитируемый текст](http://tc-image.3dn.ru/Image/Site8/lastpost.gif) ) что за шаблоны? Шаблоны всех систем... К примеру $aSys1_Img=... - массив изображений системы №1 $aSys1_Txt=... - массив всех надписей системы №1 ... и т.д
А в Gui написана общая обработка с переменными $aSys_Img $aSys_Txt ...при выборе той или иной системы общим переменным присваиваются переменные шаблонов $aSys_Img=$aSys1_Img $aSys_Txt=$aSys1_Txt и идёт их обработка... как-то так...
|
|
| |