Автор Тема: Официальный FAQ AutoIt  (Прочитано 59108 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн El Panda [?]

  • Глобальный модератор
  • *
  • Сообщений: 102
  • Репутация: 59
  • Пол: Мужской
    • Награды
Официальный FAQ AutoIt
« Создано: Сентябрь 15, 2009, 15:29:23 »
Официальный 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. В хэлпе встречаются отсутствующие картинки под примерами.
« Последнее редактирование: Сентябрь 29, 2009, 07:54:45 от CreatoR »
Партнерская программа для разработчиков ботов. Заработай на продаже своих программ!

Русское сообщество AutoIt

Официальный FAQ AutoIt
« Отправлен: Сентябрь 15, 2009, 15:29:23 »

Оффлайн El Panda [?]

  • Глобальный модератор
  • *
  • Сообщений: 102

  • Автор темы
  • Репутация: 59
  • Пол: Мужской
    • Награды
1. Почему скрипты написанные в AutoIt v 2.64 не запускаются в AutoIt v3?

AutoIt v3 использует отличную структура синтексиса от v2.64
Предыдущие версии AutoIt прекрасно справлялись с теми задачами, для которых они были разработаны — написание простых сценариев для облегчения процессов установки программного обеспечения и т.п.
Со временем люди стали использовать AutoIt для решения более сложных задач или же вовсе для написания самостоятельного ПО.
Прежние структура и синтаксис позволяли справляться с такого рода задачами, но процесс был очень сложным и обременительным.
Было принято решение сделать AutoIt более приспособленным для решения общих задач автоматизации, для этого язык был приведён к стандартному бэйсикообразному синтаксису.
« Последнее редактирование: Сентябрь 19, 2009, 16:04:22 от CreatoR »

Оффлайн El Panda [?]

  • Глобальный модератор
  • *
  • Сообщений: 102

  • Автор темы
  • Репутация: 59
  • Пол: Мужской
    • Награды
v3 более сложная, чем предыдущие версии?
« Ответ #2, Отправлен: Сентябрь 15, 2009, 15:31:16 »
2. v3 более сложная, чем предыдущие версии?

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

Код: AutoIt [Выделить]
 
; 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, вы можете использовать подсветку синтаксиса, которая значительно упрощает задачу написания скрипта.
« Последнее редактирование: Сентябрь 19, 2009, 16:06:23 от CreatoR »

Оффлайн El Panda [?]

  • Глобальный модератор
  • *
  • Сообщений: 102

  • Автор темы
  • Репутация: 59
  • Пол: Мужской
    • Награды
Как конвертировать скрипты из v2.64 в v3?
« Ответ #3, Отправлен: Сентябрь 15, 2009, 15:32:24 »
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).
« Последнее редактирование: Сентябрь 19, 2009, 16:06:32 от CreatoR »

Русское сообщество AutoIt

Как конвертировать скрипты из v2.64 в v3?
« Ответ #3 Отправлен: Сентябрь 15, 2009, 15:32:24 »

Оффлайн El Panda [?]

  • Глобальный модератор
  • *
  • Сообщений: 102

  • Автор темы
  • Репутация: 59
  • Пол: Мужской
    • Награды
Куда делась команда goto?
« Ответ #4, Отправлен: Сентябрь 15, 2009, 15:33:08 »
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
« Последнее редактирование: Сентябрь 19, 2009, 16:06:42 от CreatoR »

Оффлайн El Panda [?]

  • Глобальный модератор
  • *
  • Сообщений: 102

  • Автор темы
  • Репутация: 59
  • Пол: Мужской
    • Награды
Как я могу запустить DOS программу из AoutoIt?
« Ответ #5, Отправлен: Сентябрь 15, 2009, 15:34:17 »
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: \ )

Код: AutoIt [Выделить]
RunWait(@COMSPEC & " /c Dir C:\")

« Последнее редактирование: Сентябрь 19, 2009, 16:06:48 от CreatoR »

Оффлайн El Panda [?]

  • Глобальный модератор
  • *
  • Сообщений: 102

  • Автор темы
  • Репутация: 59
  • Пол: Мужской
    • Награды
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")
« Последнее редактирование: Сентябрь 19, 2009, 16:07:01 от CreatoR »

Оффлайн El Panda [?]

  • Глобальный модератор
  • *
  • Сообщений: 102

  • Автор темы
  • Репутация: 59
  • Пол: Мужской
    • Награды
7. Почему возникает ошибка, когда я использую двойные кавычки? (“)

Если вы хотите использовать двойные кавычки внутри строки (String), вы должны дублировать их.
Т.е. вместо одного знака “ вы должны ставить два.
К примеру, если вы хотите присвоить переменной значение: (хочу “выпить” пива) то вам нужно сделать так:
$var = "хочу ""выпить"" пива"
ну, или использовать одиночные кавычки:
$var = 'хочу "выпить" пива'
« Последнее редактирование: Сентябрь 19, 2009, 16:07:08 от CreatoR »

Русское сообщество AutoIt

Почему возникает ошибка, когда я использую двойные кавычки? (“)
« Ответ #7 Отправлен: Сентябрь 15, 2009, 15:35:16 »

Оффлайн El Panda [?]

  • Глобальный модератор
  • *
  • Сообщений: 102

  • Автор темы
  • Репутация: 59
  • Пол: Мужской
    • Награды
Что означают параметры окна «Title» и «text»?
« Ответ #8, Отправлен: Сентябрь 15, 2009, 15:35:45 »
8. Что означают параметры окна «Title» и «text»?

Вот детальное описание:
http://www.autoitscript.com/autoit3/docs/intro/windowsbasic.htm
« Последнее редактирование: Сентябрь 19, 2009, 16:07:26 от CreatoR »

Оффлайн El Panda [?]

  • Глобальный модератор
  • *
  • Сообщений: 102

  • Автор темы
  • Репутация: 59
  • Пол: Мужской
    • Награды
9. Почему я не могу присвоить переменной значение "My var is $variable"?

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

Код: AutoIt [Выделить]
MsgBox(0, "Example", "My variable is $msg")


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

Код: AutoIt [Выделить]
MsgBox(0, "Example", "My variable is " & $msg)


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

Код: AutoIt [Выделить]
$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)

« Последнее редактирование: Сентябрь 19, 2009, 16:07:35 от CreatoR »

Оффлайн El Panda [?]

  • Глобальный модератор
  • *
  • Сообщений: 102

  • Автор темы
  • Репутация: 59
  • Пол: Мужской
    • Награды
10. Почему, когда я использую Send() что бы отправить переменную происходят странные вещи?

При отправке содержимого переменной, помните, что если она содержит спецсимволы
(! ^ + {SPACE}), то они будут переведены в нажатия спецклавиш, что иногда бывает необходимо.
Что бы обойти это, нужно использовать RAW режим Send(), который не переводит спец. клавиши.
Send($myvar, 1)
« Последнее редактирование: Сентябрь 19, 2009, 16:07:45 от CreatoR »

Оффлайн El Panda [?]

  • Глобальный модератор
  • *
  • Сообщений: 102

  • Автор темы
  • Репутация: 59
  • Пол: Мужской
    • Награды
11. В чём разница между возвратным значением и @error?

В целом, возвратное значение используется для того что бы отобразить успешное выполнение функции.
Но, если функция уже возвращает что-то ( как WinGetText() ), тогда нам нужно как-то определить, сработала ли функция успешно, для этого, мы используем @error.
« Последнее редактирование: Сентябрь 19, 2009, 16:07:57 от CreatoR »

Оффлайн El Panda [?]

  • Глобальный модератор
  • *
  • Сообщений: 102

  • Автор темы
  • Репутация: 59
  • Пол: Мужской
    • Награды
12. Как я могу выйти из моего скрипта горячим сочетанием клавиш

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

Код: AutoIt [Выделить]
HotKeySet("^!x", "MyExit")
...
...
; Rest of Script
...
...
Func MyExit()
    Exit
EndFunc
 

« Последнее редактирование: Сентябрь 19, 2009, 16:08:06 от CreatoR »

Оффлайн El Panda [?]

  • Глобальный модератор
  • *
  • Сообщений: 102

  • Автор темы
  • Репутация: 59
  • Пол: Мужской
    • Награды
Как мне вставить свою иконку в скрипт?
« Ответ #13, Отправлен: Сентябрь 15, 2009, 15:39:33 »
13. Как мне вставить свою иконку в скрипт?

Вам необходимо запустить полную программу компилятор (вместо правого щелчка мыши по коду и выбор compile).
На этой странице всё детально описано.
« Последнее редактирование: Сентябрь 19, 2009, 16:08:24 от CreatoR »

Оффлайн El Panda [?]

  • Глобальный модератор
  • *
  • Сообщений: 102

  • Автор темы
  • Репутация: 59
  • Пол: Мужской
    • Награды
14. Как я могу убедиться, что только одна копия моего скрипта запущена?

Используйте функцию _Singleton().
Посмотрите раздел User Defined Functions в документации для дополнительной информации по _Singleton() и как её использовать.
« Последнее редактирование: Сентябрь 19, 2009, 16:08:32 от CreatoR »

Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
14 Ответов
54051 Просмотров
Последний ответ Апрель 28, 2012, 12:36:49
от CreatoR
2 Ответов
8961 Просмотров
Последний ответ Ноябрь 16, 2009, 09:13:26
от Suppir
12 Ответов
22446 Просмотров
Последний ответ Август 27, 2011, 20:09:15
от Nero21
28 Ответов
82124 Просмотров
Последний ответ Сентябрь 21, 2015, 02:38:28
от CreatoR
30 Ответов
13998 Просмотров
Последний ответ Апрель 02, 2012, 03:44:53
от Garrett
4 Ответов
4920 Просмотров
Последний ответ Июль 12, 2012, 11:06:51
от firex
15 Ответов
7510 Просмотров
Последний ответ Апрель 09, 2013, 11:40:20
от Mancoffee
0 Ответов
2835 Просмотров
Последний ответ Апрель 16, 2013, 00:22:25
от Maalik
0 Ответов
2586 Просмотров
Последний ответ Апрель 29, 2013, 17:05:45
от Maalik
6 Ответов
3494 Просмотров
Последний ответ Май 13, 2013, 19:44:50
от Sky-WaLkeR