Что нового

Развитие русской справки

Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Обновлены
AutoIt3.7z
UDFs3.7z

ссылки теже.

17 функций раздела _GUICtrlButton_...
_IEBodyReadText, _IEImgClick.

17 функций раздела _GUIToolTip_...
Создано 18 примеров для _GUIToolTip_...
Тема на офсайте, которая подтолкнула к созданию примеров.

Нововведение:
1. Числовые параметры теперь подсвечены, любое число в форме "0 - "
2. Переменные массива подсвечены теперь не одним цветом а тремя, как в редакторе.
3. В UDF в возвращаемых значениях подсвечены True, False, в форме "True - ", хотя склоняюсь к тому, что любое "True, False" можно подсветить, так как в ином смысле, кроме как ключевое слово оно не встречается.


Добавлено:
Сообщение автоматически объединено:

Обновлён полный комплект, ссылки в шапке.
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Обновил CustomUDFs
1. поправил ошибки
2. В Include удалил NumToNum и _NumberNumToName, объединив их в UDF - ConvertingNumbers, и добавив в неё _DecToRoman, _RomanToDec.


Добавлено:
Сообщение автоматически объединено:

Ограничение 32767 символов указано только в двух разделах, IniReadSection и IniReadSectionNames. Непонятно зачем оно нужно в разделе IniReadSectionNames, ведь эта функция возвращает имена секций, а не содержимое.
Удалить эту запись из раздела IniReadSectionNames?
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Какой лучше файл использовать для просмотра, взамен Boot.ini? Хотел win.ini, но вот, что выдаёт IniReadSectionNames:
Код:
#include <Array.au3>
$Array = IniReadSectionNames(@WindowsDir & "\win.ini")
_ArrayDisplay($Array, @WindowsDir & "\win.ini")

 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
AZJIO [?]
Какой лучше файл использовать для просмотра, взамен Boot.ini? Хотел win.ini,
Наверняка лучше несистемный. У меня win.ini вообще непонятно что показывает. Там похоже столько спецсимволов, что ArrayDisplay "с катушек слетает"
Надо конечно что-то , что есть у каждого и попроще.
Может типа :
Код:
C:\Program Files\AutoIt3\Extras\Editors\PSPad\AutoIt3.Ini


Добавлено:
Сообщение автоматически объединено:

AZJIO [?]
Удалить эту запись из раздела IniReadSectionNames?

Наверное, как не несущую реальной информации
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
AZJIO [?]
Ограничение 32767 символов указано только в двух разделах, IniReadSection и IniReadSectionNames. Непонятно зачем оно нужно в разделе IniReadSectionNames, ведь эта функция возвращает имена секций, а не содержимое.
А что если в имени секции будет столько символов? Маловероятно конечно, но всё же.

Я вообще затрудняюсь понять зачем оставили это ограничение, ведь насколько я помню, AutoIt и так больше не поддерживает Win9x.
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
CreatoR [?]
Я вообще затрудняюсь понять зачем оставили это ограничение, ведь насколько я помню, AutoIt и так больше не поддерживает Win9x.
А давайте донесём это как-то до разработчиков?
Может как баг оформить?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
ynbIpb [?]
давайте донесём это как-то до разработчиков?
Уже донесли, есть существенные планы по поводу переделывания ini функции, но поскольку тикет уже существует 5 лет, задерживать дыхание по этому поводу не стоит.
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
ynbIpb
А давайте донесём это как-то до разработчиков?
Может как баг оформить?
И дописать ещё баг: при записи параметра с пробелом в конце строки, этот самый пробел при чтении уже игнорируется. Думаю для таких параметров должны автоматически добавлятся кавычки. По прочитанным ссылкам понял что нужен бесплатный движок парсинга ini-файлов.

Обновил CustomUDFs.chm, добавил IniVirtual, IniVirtualSPE
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
В функции : FileOpen

2 = Открыть только для записи в конец файла, удалив предыдущее содержание ???
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
gregaz
gregaz сказал(а):
Так оно и есть. При выполнении многократного FileWrite запись будет происходить в конец файла, а не стирать каждый раз.
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Перевод "AutoIt и история разработчика".

История AutoIt и его разработчиков
Этот раздел предназначен для заинтересованных в том, как начинался проект AutoIt, и как подключились к проекту различные разработчики. Разработчики должны добавлять свои собственные мысли, когда они имеют время :smile:



Jon
Октябрь 1998

Я работал над проектом по созданию автоматизированной Windows NT 4 для компании в (UK) Великобритании. Стало ясно, что около половины необходимых приложений не имеют способа тихой установки. Поискав некоторое время какой-нибудь способ заставить нажиматься кнопки, натолкнулся на Microsoft ScriptIt, который был скомпилированный скрипт WinBatch разработанный для кликания кнопок в автоматической конфигурации.

ScriptIt работал хорошо, но это было крайне ненадежным. Он был заведомо капризный к скорости машины, на которой использовался и не было возможности контролировать задержки между нажатиями клавиш. Еще одна особенность, которая вызвала проблемы, не было способа указать рабочий каталог, откуда запускалась программа, что вызвало множество проблем со многими приложениями, которые я автоматизировал. Кроме того некоторые из функций не работали под NT 5 beta (т.е. Windows 2000).



Рождество 1998

Чтобы избежать мучений на Рождество я решил перейти на C программу, которая будет высылать нажатия клавиш, в надежде, что я смогу контролировать задержки.



Январь 1999

Первая версия AutoIt, выпущенная на старом сайте winfiles.com. Синтаксис был похож на ScriptIt (для Send) и представленные функции Send, Run, RunWait, WinWait, WinWaitClose, WinWaitActive, WinHide, WinActivate, WinClose, WinRestore, Sleep и SetKeyDelay. Из справочного файла v1.0:

Преимущества
- Гораздо меньший размер, 40 кб (меньше чем ScriptIt, который 600 кб).
- Будет обновлён, если найдутся проблемы.
- Функция "Reveal" намного лучше.
- Не активные окна, так же как и активные могут ожидаться.
- Возможны различные по времени задержки (указываются в миллисекундах).
- Время между нажатиями клавиш может быть изменено.
- При запуске приложения, можно указать рабочий каталог.
- Заставит окна быть активными под Win98/NT 5.0 (Использовать "WinActivate")

Недостатки
- Раздел "[ADLIB]" не реализован
- Скрипт должен быть правильно отформатирован (не допускаются пробелы в строках
содержащих команды).
- Не представлено ни одной из команд Wilson WinBatch.
(Но кто использует их вообще?)
- Из-за названий команд, которые я использовал, скрипт становится немного больше.



Январь - Апрель 1999

Многочисленные версии, выпущенные до v1.8 с функциями, такими как:
- Классный режим /reveal
- Goto!
- IfWin...
- Управление мышью
- Поддерживается аналогичное ScriptIt ADLIB
- Gosub
- Поддерживаются переменные %ENV%



Август 1999

Выпущен AutoIt v2.
Создана первая версия AutoItX.



Сентябрь 1999

AutoIt v2.1 - Создана первая версия Aut2Exe.



Сентябрь 1999 - Май 2001

Многочисленные версии и количество функций увеличиваются в быстром темпе. В принципе, если кто-то попросил функции, я добавлял их. Вызванные этим проблемы являются причиной, по которой мы больше не отступаем.



Май 2001

Исходный код AutoIt был в полном беспорядке. Весь исходник переписан на C++.



Январь 2002

AutoIt v2.62 - Создана первая версия [Программа для декомпиляции] (boo...hiss)
Создана первая версия AutoItDLL.



Декабрь 2002

AutoIt v2.64 - Последняя версия AutoIt v2.

Функция FileInstall добавлена после написания моего собственного алгоритма сжатия и библиотеки архивирования.



Январь 2003

Очень мало было разработано с 2001 по 2003 год. Проект достиг момента, где я потерял желание работать с ним. Исходный код был снова в беспорядке, потому что в проект такого рода вы склонны прибавлять каждую функцию, которую все хотят, не думая о будущем. Синтаксис AutoIt v2 был реально ужасным.

Половина просьб, полученных мной, были для элементарных циклов и выражений - половина вопросов были "как мне использовать наклонную черту в команде Run". Блин.

В это время появились многочисленные "надстройки", такие как Aut2xtra созданный Larry, который позволял использовать некоторые отсутствующие в AutoIt функции (потому что у меня не было ни времени, ни мотивации добавлять их).

IIRC Larry дал понять, что он был расстроен нехваткой развития и предложил написать новую версию. Я решил, что если хотят новой версии, то она должна более походить на "правильный" язык. Я начал разрабатывать каркас для AutoIt v3.

Предыдущие версии были очень строги к синтаксису, это выглядело так: "Command, param1, param2,..." и потребовалось около месяца, чтобы придумать что-то, что могло интерпретировать сложные выражения, содержашиеся в строках (много прибегая к googlе-запросам). Хотя я "получил" это теперь, написать код выражений в AutoIt было 2-ым самым трудным, что я когда-либо сделал. (Самым трудным, что я написал, был алгоритм сжатия используемый в Aut2Exe, который я написал с нуля)

Большинство текущих разработчиков начали помогать мне сразу после этого момента. Я уже забыл, когда каждый из них начал помогать мне, поэтому надеюсь они сами могут восполнить этот пробел здесь.



Март 2003

Выпущена первая публичная бета-версия AutoIt v3 (после многих разговоров).



Февраль 2004

После более чем 100 бета-версий и development spirialling well out of control AutoIt v3.0.100 была наконец выпущена.


Jon :smile:




Larry
В начале 2001 я начал свою собственную автоматизацию развертывания систем WinNT. Я обнаружил, что предыдущий куратор использовал скрипт AutoIt для обработки некоторых взаимодействий. Увлёкся... Я разобрался в управлении, которое AutoIt имел в процессе развёртывания, выбрасывая все остальные средства автоматизации и сосредотачиваясь на решении "Всё-AutoIt".

В то время все мы были в группе Yahoo AutoItList. У меня было много свободного времени на работе (благодаря AutoIt) и я уделял много внимания AutoItList. Jon заметил мою вовлечённость и разрешил мне модерировать/поддерживать эту группу. Хотя, я не смотрел в разделе файлов, особенно, в те годы.

К 2003, я продвинулся в AutoIt до его пределов, поэтому начал изучать C, чтобы создать утилиты командной строки (включая GUI, AutGUI.exe), чтобы использовать с AutoIt. Тогда я начал угрожать всем попыткой создать AutoIt "следующего поколения". Я разбирался около 2 дней в коде анализатора скрипта и (я думаю) Jon озаботился тем, насколько ужасно было моё неумелое обращение, и какой слабый продукт мог последовать. Таким образом он спас меня и решил посвятить в его собственные усилия.

Я думаю Jon и я имели некоторые такие же привилегии, таким образом, он короновал меня основным модератором форума AutoItScript. Впоследствии, в понимании моей лени и с рекомендации к назначению других он начал раздавать ответственность.

Один из моих разочарований сообществом AutoIt, или просто в бесплатности ПО вообще, я думаю, в том, что усилия и часы никогда не будет по-настоящему оценены. Я подпитывался только гордостью в этих усилиях.

Lar.




Jos
Я использовал AutoIt с версии 2...
Стал более активным на старом форуме перед тем как перейти на этот новый форум.
Начал предлагать помощь на такие вещи, как:
- Автоматизация создания справочного файла.
- Сделать открытие справочного файла для функций и ключевых слов AutoIt3 (F1) работающих в редакторах Crimsom/TextPad/SciTE.

Написал множество UDF.
Написал Tidy для синтаксиса Autoit3, как способ изучить AU3. Сейчас это BCX - C (Basic to C converter), потому что я хотел чтобы он работал быстрее.
Начал разработку AutoIt3 Lexer для SciTE и представлены, для включения в SciTE v 1.60.
Начал пакет установки SciTE4AutoIt3, чтобы сделать единый установщик для всех новинок, разработанных другими и мной и создал справочный файл для него.
Написал AutoIt3Wrapper, чтобы обеспечить легкий доступ к обоим версиям, основной и бета версии AutoIt3 и обеспечить директивами компиляции для обновления информации в ресурсах компилируемой программы.
Открыл веб-сайт SciTE4AutoIt3, когда SciTE стал более популярным.

Стал модератором, когда слишком много (как бы сказать это вежливо) детских скриптов начали терроризировать форум, а у Jon'а не всегда есть время, чтобы быть рядом, а Larry живёт в другом часовом поясе.

Написал Obfuscator, который основывается на исходном коде Tidy, чтобы сделать скрипт частично нечитаемым.

Jos :smile:

1. Не смог перевести фразу: "The problems this caused is why we don't give in all the time any more."
2. Переводить ли имена (даже поиск в google не дал ответа, везде 2 мнения)
3. Название "AutoIt и история разработчика" хотелось бы "AutoIt и история разработки", но Developer именно разработчик...
4. "BCX - C" - непонятное сокращение
Остальной недоперевод, просто не доделано.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
AZJIO [?]
Перевод "AutoIt и история разработчика".
Стоп, а это откуда?
Неужели из старой справки? :scratch:

Не смог перевести фразу: "The problems this caused is why we don't give in all the time any more."
“Вызванные этим проблемы - это и есть причина по которой мы больше не отступаем (или уступаем) всё время.”
Как то так.
А вот так всё вместе:
«Многочисленные версии и количество функций увеличиваются в быстром темпе. В принципе, если кто-то просил функцию, я её добавлял туда. Вызванные этим проблемы - это и есть причина по которой мы больше не отступаем всё время.»

Переводить ли имена
Какие имена?

Название "AutoIt и история разработчика" хотелось бы "AutoIt и история разработки", но Developer именно разработчик...
В самом заголовке видимо ошибка, т.к в названии пункта (в TOC) написано «History of AutoIt and Developers», что означает «История AutoIt и его Разработчики» (это не дословный перевод, но довольно точно отражает суть).

"BCX - C" - непонятное сокращение
Насколько я знаю, это название консольной утилиты Basic to C converter.
Т.ч должно быть как то так:
«Написал Tidy для синтаксиса Autoit3, как способ изучить AU3. Сейчас это BCX - C (Basic to C converter), потому что я хотел чтобы он работал быстрее.»
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Обновлён CustomUDFs, добавлено 17 функций ModernMenuRaw и IniVirtual с последними поправками.
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Можно ещё развить тему реестра в справке. В своё время при написании JumpReg возникали вопросы есть ли ограничения по размеру значения параметра, какого типа лучше создать параметр. И не так давно узнал, что типы данных не просто ячейка для определённого вида значений, а что она возаврщает значения именно в том формате который определяет тип данных. То есть не требует преобразования, как это требует INI-файл, который все данные возвращает только в текстовом виде.
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Обновил
AutoIt3.7z
UDFs3.7z

Перевёл раздел "Debug Management", идея началась отсюда.
Доперевёл скрипты раздела GuiComboBox и GuiComboBoxEx (кроме тех что с непереведёнными функциями ~3 шт)
половина примеров раздела _GUICtrlButton_ перевёл (кроме тех что не поддерживаются в WinXP).
Частично допереведены примеры в разделе _GUIImageList_..., "String Management"

В GUICtrlCreateCombo добавил нативный вызов $CB_SETDROPPEDWIDTH (идея от madmasles)
Недопереведённая страница "История AutoIt"
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Намётки на новую страницу в доп. справке.
Практика хорошего программирования

1. Почему не рекомендуется использовать Dim?
Потому что этот вызов может использовать глобальную переменную вместо локальной. Программист заранее должен знать используется ли переменная с тем же именем в глобальной области видимости. Если это UDF, то заранее знать этого невозможно. Это означает, что объявлению массива с помощью Dim должно предшествовать объявление с помощью Local (для локальной видимости внутри функции) или Global. В данном случае Dim используется для пересоздания массива. В остальных случаях использовать Local или Global.

2. Как избежать пересечение имён локальных переменных с глобальными переменными?
Используйте префикс, например $g_Var, который в имени содержит принадлежность глобальной области видимости. Если переменная не требует глобальной области видимости, то рекомендуется создавать её в локальной области видимости, чтобы уменьшить общее количество просматриваемых переменных и заботу по очистке содержимого переменных для уменьшения расходуемой памяти.

3. В чём преимущества ByRef?
Если используется вызов функции в цикле с передачей в функцию большого массива, то передача каждого параметра сопровождается копированием переменной в переменную создаваемую внутри функции с локальной областью видимости. Ключевое слово ByRef позволяет передать указатель на переменную и все операции, происходящие с ней внутри функции фактически, будут происходить с переменной, которая была передана в месте вызова функции. Отсутствие операции копирования существенно ускоряет работу цикла и меньше затрачиваемой памяти.

4. Почему рекомендуется использовать именованую константу вместо явного указания числа?
Использование чисел затрудняет чтение кода. Название константы содержит смысловую характеристику назначения константы. Особенно затрудняет чтение кода, когда число образовано суммированием констант. Более подробно можно прочитать статью "Магическое число (программирование)" на wikipedia: Магическое число (программирование)

5. Особенности использования переменной счётчика итераций в цикле For
Счётчик итерации ($i) функции For не требует объявления. При инициализации цикла он принудительно создаётся в локальной области видимости. Хорошей практикой кодирования является неиспользование переменной счётчика вне цикла. Хотя явного ограничения на использовании нет.

6. Почему рекомендуется суммировать стили с помощью BitOR?
Некоторые стили образованы суммированием стилей. Если стиль уже содержит добавляемую константу, то это искажает результат. Функция BitOR исключает возможность добавления константы в стиль, который уже содержит эту константу. Константы имеют значения 2^x, где x - положительное целое число, поэтому если к стилю с числовым значением 10 (8+2) добавить 2, то в результате получаем стиль 12 (8+4), а стиль с константой 2 отсутствует. Вот как это выглядит в двоичном коде:
00000001 = 1
00000010 = 2
00000100 = 4
00001000 = 8
00010000 = 16
00100000 = 32
00001010 = 8 + 2
00001100 = 8 + 4

7. Почему необходимо явно объявить все локальные переменные внутри функции?
Если локальная переменная внутри функции не объявлена принудительно, то при совпадении имени с глобальной переменной будет использоваться последняя. Поэтому все локальные переменные должны быть явно объявлены.
 
Верх