AutoIt

Часто задаваемые вопросы (FAQ)

Этот раздел предназначен для ответов на некоторые вопросы, которые были заданы на форуме (англ.).  Если вы не найдёте здесь ответ на свой вопрос - попробуйте поискать/спросить на форуме.

Вопросы

  1. Для чего предназначен AutoIt3?
  2. Сложно ли освоить AutoIt?
  3. Как увидеть результаты работы скрипта?
  4. Могу ли я создавать оконный интерфейс?
  5. Как запустить программу DOS с помощью AutoIt?
  6. Почему с помощью Run() я могу запустить только .exe или .com файлы? Как на счёт запуска .msi / .txt и других?
  7. Почему возникает ошибка, когда я пытаюсь использовать двойные кавычки (")?
  8. Что означают параметры заголовок ("title") и текст ("text"), используемые в функциях для работы с окнами?
  9. Почему, когда я пытаюсь вывести значение переменной, используя конструкцию "Значение переменной: $variable", я не получаю ожидаемого результата?
  10. Почему, когда я использую Send() для отправки содержимого переменной, получается что-то странное?
  11. В чём разница между возвращаемым значением и @error?
  12. Как завершить выполнение скрипта по нажатию горячей клавиши?
  13. Как использовать свой собственный значок для скомпилированного скрипта?
  14. Как предотвратить запуск второй копии моего скрипта?
  15. Какие технические ограничения AutoIt3?
  16. Почему в примерах файла справки отсутствует какое-то изображение?
  17. Как мне найти ответ на свой вопрос, который не содержится в этом FAQ?



Наверх 1. Для чего предназначен AutoIt3?

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


Наверх 2. Сложно ли освоить AutoIt?

Освоить AutoIt3 очень легко, посмотрите пример вызова команд

Run('calc.exe') ; Запуск программы
Beep(500, 1000) ; Воспроизводит звуковой сигнал
Shutdown(32) ; Ждущий режим

Все "строки" заключаются в кавычки. Многие текстовые редакторы поддерживают подсветку синтаксиса.


Наверх 3. Как увидеть результаты работы скрипта?

Вы можете использовать MsgBox для вывода в диалоговое окно, ConsoleWrite для вывода в консоль редактора (например SciTE), FileWrite для записи данных в файл.


Наверх 4. Могу ли я создавать оконный интерфейс?

Да, AutoIt3 позволяет создавать окна со стандартными элементами интерфейса и выполнять с ними различные операции: чтение, изменение атрибутов и т.д. Также в UDF имеются более расширенные функции управления элементами интерфейса.


Наверх 5. Как запустить программу DOS с помощью AutoIt?

Если вы хотите использовать DOS-команды такие как “DIR”, вы должны запустить её в командном интерпретаторе (command.com или cmd.exe, в зависимости от вашей ОС). Макро @ComSpec содержит правильное расположение этого файла. Вам следует использовать функцию RunWait, так как она ждет пока DOS-команда завершит свое действие прежде чем переходит к обработке следующей строки скрипта. Ниже вы найдёте скрипт, который выполняет команду “DIR” для папки “С:” (аналогично запуску команды command.com /c Dir C:\ или cmd.exe /c Dir C:\)

RunWait(@ComSpec & " /c Dir C:\")


Наверх 6. Почему с помощью Run() я могу запустить только .exe или .com файлы?  Как насчёт запуска .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")


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

Если вы хотите использовать эти же кавычки внутри строки, то вам следует удвоить их кол-во, то есть для каждой кавычки используйте две кавычки, вместо одной. Например, если вы хотите переменной присвоить строку: Вот "это" слово в предложении обрамлено кавычками!, то вам надо сделать следующее:

$var = "Вот ""это"" слово в предложении обрамлено кавычками!"

либо использовать одинарные кавычки:

$var = 'Вот "это" слово в предложении обрамлено кавычками!'


Наверх 8. Что означают параметры заголовок ("title") и текст ("text"), используемые в функциях для работы с окнами?

Более подробную информацию вы можете найти здесь.


Наверх 9. Почему, когда я пытаюсь вывести значение переменной, используя конструкцию "Значение переменной: $variable", я не получаю ожидаемого результата?

Если у вас есть переменная с именем $msg и вы хотите вывести его в MsgBox, то следующая конструкция НЕ сработает:

MsgBox(0, "Пример", "Моя переменная $msg")

Фактически это выдаст текст сообщения Моя переменная $msg. Вам же следует указать интерпретатору, что необходимо соединить строку с содержимым переменной используя оператор &:

MsgBox(0, "Пример", "Моя переменная " & $msg)


Дополнение: Также можно воспользоваться функцией StringFormat. Например, чтобы объединить переменные от $var1 до $var5, используйте следующую конструкцию:

$msg = StringFormat("Переменная1= %s, Переменная2= %s, Переменная3= %s, Переменная4= %s, Переменная5= %s", $var1, $var2, $var3, $var4, $var5)
MsgBox(0, "Пример", $msg)


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

Если вы используете функцию Send для отправки содержимого переменной, имейте в виду, что если эта переменная содержит специальные символы, такие как ! ^ + {SPACE}, то при отправке они будут переведены в специальные сочетания клавиш. А это вряд ли то, что вам нужно. Для предотвращения подобных случаев используйте отправку каждого символа “как есть” - с помощью параметра, как в коде ниже:

Send($myvar, 1)


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

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


Наверх 12. Как завершить выполнение скрипта при нажатии горячей клавиши?

Если вы хотите завершить скрипт по нажатию определенной комбинации клавиш, используйте функцию HotKeySet, которая запускает заданную пользователем функцию при нажатии указанной комбинации клавиш. Эта пользовательская функция должна содержать ключевое слово Exit.

Ниже приведен код, который завершает скрипт при нажатии комбинации клавиш CTRL+ALT+x

HotKeySet("^!x", "MyExit")
; ...
; ...здесь некоторый код, который выполняется...
; ...

Func MyExit()
    Exit
EndFunc


Наверх 13. Как использовать свой собственный значок для скомпилированного скрипта?

Вам надо запустить программу компиляции скриптов (а не просто выбрать “Компиляция/Compile” при клике правой кнопкой мыши на файл скрипта). Эта страница справки описывает работу компилятора более подробно. Также используйте AutoIt3Wrapper, чтобы указывать иконку в самом скрипте с помощью директив.


Наверх 14. Как предотвратить запуск второй копии моего скрипта?

Используйте функцию _Singleton(). Посмотрите раздел справки по пользовательским функциям (UDF) для более подробной информации по работе этой функции и способов ее применения.

Наверх 15. Какие технические ограничения AutoIt3?

Ниже вы найдите текущие технические ограничения налагаемые на AutoIt. Имейте в виду, что некоторые ограничения сугубо теоретические и вы скорее достигнете пределы производительности или операционной памяти, прежде чем сработает ограничение. Также смотрите раздел Ограничения AutoIt3 и значения по умолчанию


ЗначениеОписание
2 147 483 647 Максимальная длина строковой переменной. Учитывая ограничение 2 Гб на один процесс и символы находящиеся в памяти в Юникоде, это заметно снижает указанную величину.
без ограничения Максимальное кол-во GUI-окон.
5100 Максимальный уровень вложенности рекурсивного вызова функций.
без ограничения Максимальное кол-во пользовательских функций.
без ограничения Максимальное кол-во используемых в скрипте переменных.
от 1.7E–308 до 1.7E+308 Диапазон чисел с плавающей точкой с точностью до 15 знаков после запятой.
Диапазон целых чисел : 64-битный целый знаковый тип.
от 0x80000000 до 0x7FFFFFFF Диапазон шестнадцатеричных чисел: 32-битный целый знаковый тип.
64 максимальное кол-во измерений в массиве.
16 млн общее кол-во элементов в массиве.

Наверх 16. Почему в примерах файла справки отсутствует какое-то изображение?

Это должна была быть кнопка “Открыть/Open”, которая открывает примеры из справки в окне редактора. Такого рода ошибка возникает, когда библиотека hhctrl.ocx неправильно зарегистрирована в системе или этот файл испорчен.
Попробуйте зарегистрировать выполнив команду "regsvr32 hhctrl.ocx" (диалог "Выполнить" по Win+R) или проверьте исправность файла.


Наверх 17. Как мне найти ответ на свой вопрос, который не содержится в этом FAQ?

Вы можете использовать вкладку "Поиск" в этой справке. Вы можете выполнить поиск на официальном форуме или на форуме Русское сообщество AutoIt