Что нового

Официальный FAQ AutoIt

Статус
Закрыто для дальнейших ответов.

El Panda

Продвинутый
Сообщения
101
Репутация
59
Официальный FAQ AutoIt
Свободный перевод от Axe, специально для Русского сообщества AutoIt.

Вопросы:

1. Почему скрипты написанные в AutoIt v 2.64 не запускаются в AutoIt v3?
2. v3 более сложная, чем предыдущие версии?
3. Как конвертировать скрипты из v2.64 в v3?
4. Куда делась команда goto?
5. Как я могу запустить DOS программу из AoutoIt?
6. Почему RUN можно использовать только для запуска EXE файлов? Как быть с MSI, TXT и другими?
7. Почему возникает ошибка, когда я использую двойные кавычки? (“)
8. Что означают параметры окна «Title» и «text»?
9. Почему я не могу присвоить переменной значение "My var is $variable"?
10. Почему, когда я использую Send() что бы отправить переменную происходят странные вещи?
11. В чём разница между возвратным значением и @error?
12. Как я могу выйти из моего скрипта горячим сочетанием клавиш?
13. Как мне вставить свою иконку в скрипт?
14. Как я могу убедиться, что только одна копия моего скрипта запущена?
15. Какие существуют ограничения в AutoIt v3?
16. В хэлпе встречаются отсутствующие картинки под примерами.
 
Автор
E

El Panda

Продвинутый
Сообщения
101
Репутация
59
Почему скрипты написанные в AutoIt v 2.64 не запускаются в AutoIt v3?

1. Почему скрипты написанные в AutoIt v 2.64 не запускаются в AutoIt v3?

AutoIt v3 использует отличную структура синтексиса от v2.64
Предыдущие версии AutoIt прекрасно справлялись с теми задачами, для которых они были разработаны — написание простых сценариев для облегчения процессов установки программного обеспечения и т.п.
Со временем люди стали использовать AutoIt для решения более сложных задач или же вовсе для написания самостоятельного ПО.
Прежние структура и синтаксис позволяли справляться с такого рода задачами, но процесс был очень сложным и обременительным.
Было принято решение сделать AutoIt более приспособленным для решения общих задач автоматизации, для этого язык был приведён к стандартному бэйсикообразному синтаксису.
 
Автор
E

El Panda

Продвинутый
Сообщения
101
Репутация
59
v3 более сложная, чем предыдущие версии?

2. v3 более сложная, чем предыдущие версии?

Нет. На самом деле, во многих случаях, он стал гораздо проще, чем в предыдущих версиях, т.к. вам не придётся прилагать усилий что бы заставить язык делать то, для чего он никогда не был предназначен.
Подавляющее большинство старых скриптов AutoIt были сосредоточены вокруг установки программного обеспечения и нажатия кнопки "Далее" в диалоговых окнах.
Большинство из этих сценариев могут быть преобразованы в v3, нужно просто добавить пару скобок.
Вот пример такого скрипта в v2 и v3 (Имитация установки программного обеспечения с несколькими диалогами, в которых используются кнопки Next и Finish)

Код:
; v2.64 Script
WinWaitActive, Welcome, Welcome to the XSoft installation
Send, !n
WinWaitActive, Choose Destination, Please choose the
Send, !n
WinWaitActive, Ready to install, Click Next to install
Send, !n
WinWaitActive, Installation Complete, Click Finish to exit
Send, !f
WinWaitClose, Installation Complete
 
; v3 Script
WinWaitActive("Welcome", "Welcome to the XSoft installation")
Send("!n")
WinWaitActive("Choose Destination", "Please choose the")
Send("!n")
WinWaitActive("Ready to install", "Click Next to install")
Send("!n")
WinWaitActive("Installation Complete", "Click Finish to exit")
Send("!f")
WinWaitClose("Installation Complete")


Теперь это выглядит не так похабно как раньше.
Т.к. все стринги заключены в кавычки, вам больше не придется сталкиваться с проблемами, вызванными начальными и конечными пробелами в тексте.
Также появилась офигенная поддержка многих текстовых редакторов. Когда вы пишете в v3, вы можете использовать подсветку синтаксиса, которая значительно упрощает задачу написания скрипта.
 
Автор
E

El Panda

Продвинутый
Сообщения
101
Репутация
59
Как конвертировать скрипты из v2.64 в v3?

3. Как конвертировать скрипты из v2.64 в v3?

Первое что нужно сделать — спросить себя «Оно мне надо?» v2.64 всегда можно будет скачать и его поддержка не будет приостановлена.
Но если уж очень хочется...
Существует раздел в справочном файле, который показывает, как связаны команды v2 и V3.
http://www.autoitscript.com/autoit3/docs/intro/v264users.htm
Один из авторов AutoIt v3 написал утилиту для автоматического преобразования скриптов v2 в v3.
Скрипты конвертируются достаточно хорошо, если только ваш код не напоминает срач в свинарнике.
Конвертор вы можете найти в каталоге "Extras" (Пуск \ AutoIt v3 \ Extras - или в каталоге, в который вы установили AutoIt v3).
 
Автор
E

El Panda

Продвинутый
Сообщения
101
Репутация
59
Куда делась команда goto?

4. Куда делась команда goto?

Пропили. Это зло. И не надо спрашивать «а почемуууу?!» — пропили и всё тут.
AutoIt v3 использует большинство стандартных «Петель», goto больше не нужен.
Посмотрите While, Do, For, ExitLoop, ContinueLoop и Functions — это более модные способы организовать цикл.
Ну и раз уж смотрите справку, советую посмотреть ещё и эти разделы: loops, conditional statements и functions.
Я обещаю вам, если вы освоите эти вещи, вы сможете написать скрипт практически на любом другом языке в течение нескольких минут.
Вот простой пример цикла в v2.64 с использованием goto:

:mylabel
...чего-то поделать...
...и ещё чего-то поделать...
goto, mylabel

Пример налогичного цикла в v3 с использованием оператора While, который всегда возвращает истину

While 1 = 1
...чего-то поделать...
...и ещё чего-то поделать...
Wend
 
Автор
E

El Panda

Продвинутый
Сообщения
101
Репутация
59
Как я могу запустить DOS программу из AoutoIt?

5. Как я могу запустить DOS программу из AoutoIt?

Если вы хотите запустить что-то вроде DOS команды "Dir", то вы должны запустить ее в командной строке (command.com или cmd.exe в зависимости от ОС)
Где находятся эти файлы, вы можете узнать тут:
http://www.autoitscript.com/autoit3/docs/macros.htm
Вам необходимо использовать функцию RunWait() она ожидает окончания выполнения DOS программы и только потом переходит к выполнению следующей строки скрипта.
Вот пример выполнения DOS команды Dir с переходом в корень диска C (По сути, выполнение команды command.com / C Dir C: \ )

Код:
RunWait(@COMSPEC & " /c Dir C:\")
 
Автор
E

El Panda

Продвинутый
Сообщения
101
Репутация
59
Почему RUN можно использовать только для запуска EXE файлов? Как быть с MSI, TXT

6. Почему RUN можно использовать только для запуска EXE файлов? Как быть с MSI, TXT и другими?

Существует лишь несколько запускных типов файлов, как правило, это EXE, BAT, COM, PIF.
Другие типы файлов, такие как TXT, MSI выполняются при помощи сторойнней программы.
Например, при двойном щелчке на “MyFile.msi” в фоновом режиме выполняется команда “msiexec.exe myfile.msi”.
Потому для запуска MSI файлов из AutoIt, вы можете использовать следующий код:
RunWait ( "Msiexec myfile.msi")
или использовать команду «Start», которая автоматически «поймёт» как запустить файл
RunWait(@COMSPEC & " /c Start myfile.msi")
или же воспользоваться функцией ShellExecuteWait которая запустит файл, так же, как если бы вы дважды щёлкнули по нему мышкой:
ShellExecuteWait("myfile.msi")
 
Автор
E

El Panda

Продвинутый
Сообщения
101
Репутация
59
Почему возникает ошибка, когда я использую двойные кавычки? (“)

7. Почему возникает ошибка, когда я использую двойные кавычки? (“)

Если вы хотите использовать двойные кавычки внутри строки (String), вы должны дублировать их.
Т.е. вместо одного знака “ вы должны ставить два.
К примеру, если вы хотите присвоить переменной значение: (хочу “выпить” пива) то вам нужно сделать так:
$var = "хочу ""выпить"" пива"
ну, или использовать одиночные кавычки:
$var = 'хочу "выпить" пива'
 
Автор
E

El Panda

Продвинутый
Сообщения
101
Репутация
59
Что означают параметры окна «Title» и «text»?

8. Что означают параметры окна «Title» и «text»?

Вот детальное описание:
http://www.autoitscript.com/autoit3/docs/intro/windowsbasic.htm
 
Автор
E

El Panda

Продвинутый
Сообщения
101
Репутация
59
Почему я не могу присвоить переменной значение "My var is $variable"?

9. Почему я не могу присвоить переменной значение "My var is $variable"?

Если у вас есть переменная $msg и вы хотите напечатать её значение в MsgBox, то это не будет работать:

Код:
MsgBox(0, "Example", "My variable is $msg")


Фактически, эта команда выведет в MsgBox следующий текст: My variable is $msg.
Всё что вам нужно, так это заставить AutoIt объединить текст и String переменную, используя оператор &:

Код:
MsgBox(0, "Example", "My variable is " & $msg)


Примечание: Если вам надо объединить несколько строковых переменных, то вы можете воспользоваться более удобной функцией StringFormat(). Например, если вы хотите объединить переменные от $var1 до $var5, то проще это выполнить будет так:

Код:
$msg = StringFormat("Var1 is %s, Var2 is %s, Var3 is %s, Var4 is %s, Var5 is %s", $var1, $var2, $var3, $var4, $var5)
MsgBox(0, "Example", $msg)
 
Автор
E

El Panda

Продвинутый
Сообщения
101
Репутация
59
Почему, когда я использую Send() что бы отправить переменную происходят странные

10. Почему, когда я использую Send() что бы отправить переменную происходят странные вещи?

При отправке содержимого переменной, помните, что если она содержит спецсимволы
(! ^ + {SPACE}), то они будут переведены в нажатия спецклавиш, что иногда бывает необходимо.
Что бы обойти это, нужно использовать RAW режим Send(), который не переводит спец. клавиши.
Send($myvar, 1)
 
Автор
E

El Panda

Продвинутый
Сообщения
101
Репутация
59
В чём разница между возвратным значением и @error?

11. В чём разница между возвратным значением и @error?

В целом, возвратное значение используется для того что бы отобразить успешное выполнение функции.
Но, если функция уже возвращает что-то ( как WinGetText() ), тогда нам нужно как-то определить, сработала ли функция успешно, для этого, мы используем @error.
 
Автор
E

El Panda

Продвинутый
Сообщения
101
Репутация
59
Как я могу выйти из моего скрипта горячим сочетанием клавиш

12. Как я могу выйти из моего скрипта горячим сочетанием клавиш

Очень просто. Если вы хотите что бы ваш скрипт завершал работу по нажатию горячих клавиш, то вам следует воспользоваться функцией HotKeySet(), что бы выполнить пользовательскую функцию по горячему сочетанию клавиш.
Такая пользовательская функция должна содержать команду Exit.
Вот пример скрипта, из которого можно выйти нажав CTRL+ALT+x:

Код:
HotKeySet("^!x", "MyExit")
...
...
; Rest of Script
...
...
Func MyExit()
    Exit 
EndFunc
 
Автор
E

El Panda

Продвинутый
Сообщения
101
Репутация
59
Как мне вставить свою иконку в скрипт?

13. Как мне вставить свою иконку в скрипт?

Вам необходимо запустить полную программу компилятор (вместо правого щелчка мыши по коду и выбор compile).
На этой странице всё детально описано.
 
Автор
E

El Panda

Продвинутый
Сообщения
101
Репутация
59
Как я могу убедиться, что только одна копия моего скрипта запущена?

14. Как я могу убедиться, что только одна копия моего скрипта запущена?

Используйте функцию _Singleton().
Посмотрите раздел User Defined Functions в документации для дополнительной информации по _Singleton() и как её использовать.
 
Автор
E

El Panda

Продвинутый
Сообщения
101
Репутация
59
Какие существуют текущие ограничения в AutoIt v3?

15. Какие существуют текущие ограничения в AutoIt v3?

Вот информация о текущих ограничениях в AutoIt v3.
Обратите внимание, что некоторые ограничения являются исключительно теоритическими и вы можете столкнуться с проблемами производительности и памяти прежде, чем достигните фактически обозначенного ограничения.

Максимальная длина одной строки скрипта: 4095
Максимальная длина String: 2147483647 символов
Диапазон чисел (плавающая запятая/ floating point): от 1.7E–308 до 1.7E+308 с пятнадцатисимвольной точностью
Диапазон чисел (целые/Integer): 64-разрядное целое
Шестнадцатеричные номера: 32-разрядное целое число (от 0x80000000, до 0x7FFFFFFF)
Массивы: максимум 64-мерный и/или в общей сложности 16 миллионов элементов
Максимальная глубина рекурсивных вызовов функции: 5100 уровней
Максимальное число переменных, используемых одновременно: нет предела
Максимальное количество пользовательских функций: нет предела
Максимальное количество окон GUI: нет предела
Максимальное количество элементов управления GUI: 65532
 
Автор
E

El Panda

Продвинутый
Сообщения
101
Репутация
59
В хэлпе встречаются отсутствующие картинки под примерами.

16. В хэлпе встречаются отсутствующие картинки под примерами.

Это должна быть кнопка «Открыть», которая открывает пример в хэлпе.
Возможно, проблема в том, что Hhctrl.ocx не зарегистрирован или повреждён.
Попробуйте зарегистрировать его введя в командной строке (пуск-выполнить) "regsvr32 hhctrl.ocx" или проверьте, не повреждён ли файл.
 
Статус
Закрыто для дальнейших ответов.
Верх