v3.3.8.1
©1999-2012 Jonathan Bennett & команда AutoIt
Домашняя страница AutoIt v3
Открыть документацию в виде дерева: Все, AutoIt3, UDF-функции, Функции пользователей
Перейти к официальной документации на английском языке
- Введение
- Лицензия
- Каталог установки
- Часто задаваемые вопросы (FAQ)
- Авторы
- История / Список изменений
- История AutoIt и разработчиков
Использование AutoIt
- Запуск скриптов
- AutoIt и Windows Vista/7
- Параметры командной строки
- Редакторы скриптов
- Компиляция скриптов
- Утилита AutoIt Syntax Checker (Au3Check)
- Утилита AutoIt Window Info (AU3Info)
- Заголовки и текст окон (основы)
- Заголовки и текст окон (дополнительно)
- Элементы управления
- Поддержка Юникод
- Назначение
- Примечания для пользователей AutoIt v2
- Запуск в 64-битных версиях Windows
Обучение
- Мой первый скрипт (Привет Мир!)
- Простая автоматизация блокнота
- Установка WinZip
- Регулярные выражения
Описание языка
- Типы данных
- Переменные
- Макросы
- Операторы
- Условные операторы
- Операторы циклов
- Функции
- Комментарии
Описание GUI
- Концепция GUI
- Режим GUI MessageLoop
- Режим GUI OnEvent
Объекты
- Описание Obj/COM
Ключевые слова/выражения
- Ключевые слова/выражения
Макросы
- Все макросы
- Макросы связанные с AutoIt
- Макросы каталогов
- Макросы системной информации
- Макросы даты и времени
Функции
- Примечания по использованию функций
- Все функции
- Функции по разделам
Приложения
- Ограничения AutoIt3 и значения по умолчанию
- Символы ASCII
- CLSID специальных папок
- Стили GUI и элементов
- Стандартные шрифты Windows
- Значения @OSLang
- Список клавиш Send
- Стандартные шрифты Windows
- Коды сообщений Windows
UDF
- Описание пользовательских функций
- Все UDF-функции
- UDF-функции по разделам
Функции пользователей
- Все функции пользователей
- Функции по разделам
Коротко о главном.
Что такое AutoIt?
AutoIt(Дословный перевод «Автоматизируйте это»)-это basic’овидный язык программирования на котором можно автоматизировать рутинные работы(создание ботов).
На нём можно:
- Работа с протоколами TCP,UDP
- Интернет: чтение HTML кода страниц и скачивание файлов, работа с FTP, отправка E-mail сообщений, работа с базами данных MySQL и SQLite.
и так далее. Этот список можно продолжит бесконечно много т.к поддерживаются DLL.
Какой софт нужен для работы с AutoIt?
Нужный софт можно скачать с оффициального сайта AutoIt
Введение в AutoIt
Как говорилось выше с помощью AutoIt(далее AI) можно автоматизировать почти всё происходящее на компьютере.
Переменные
Переменные в AI объявляются с помощью команды dim, а синтаксис такой
dim $имя переменной
.
Вначале каждой переменной должен стоять знак $.
Вывод данных
Вывод данных делается с помощью команды ConsoleWrite(«текст или перем»).
Соединение строк организуется не символом «+» а символом «&»
Ввод данных
Только через GUI есть консольный ввод но с ним очень много мороки. Я за свои полгода работы на AI так с ним и не разобрался
Условия и операторы
Ну думаю с условиями программирующий человек разберётся и так. Но для тех уто с этим не сталкивался сейчас всё опишу.Условие If Then Else — записывается так If $var then действия else действия
где $var какая-то переменная.
Операторы присваивания
= += -= *= /=
&= — оператор при котором текст присваивается к уже существующему тексту в переменной aka $var=$var & «1»
Математические операторы
+ — * / ^
& — оператор Конкантенации(сцепление 2 текстов)
Операторы сравнения
= == <> > >= < <=
Логические операторы
AND OR NOT
Циклы
В AI есть 4 типа циклов это
- For…Next
- While…WEnd
- Do…Until
- For…In…Next
Цикл For организуется таким способом.
dim $var
For $var=0 to число повторений stepval шаг(по желанию)
действия
Next
Цикл While организуется так.
dim $var
while $var=1
действия
WEnd
Цикл Do… Until так.
dim $var
Do
действия
Until $var=1
Ну и цикл For… In… Next замена foreach.
Dim $Array[4],$var
For $var=0 In $Array
действия
Next
Массивы
Массивы объявляются командой dim вот так.
dim $arr[размер массива]
dim $var=$arr[элемент]
На этом я решаюсь закончить статью.
Ссылки.
AutoIt — Official site
Русское сообщество AutoIt
📲 Как автоматизировать рутинные действия под Windows ? Этот вопрос часто задают мне в реальной жизни, видя, как мой компьютер сам выполняет действия, будь то в играх, будь то на сайтах или других местах. Если вас интересует данная тема автоматизации в Windows и вы хотите научиться, как автоматически выполнять какие-либо действия в любом приложении под Windows, то вам сюда. Оговорюсь, это не полный гайд, а введение и основы. Поняв эти основы вы уже сможете автоматизировать до 80% всех действий в Windows или приложениях. А для дальнейшего развития навыков есть куча тематических форумов и мануалов, благо, язык Autoit очень легек в освоении.
Как вы уже поняли, сегодня будут основы по Autoit — бесплатный набор средств и язык для автоматизации выполнения задач в Microsoft Windows. Позволяет создавать скрипты автоматизации (иногда называемые макросами), способные имитировать действия пользователя. Я знаю, что некоторые люди скачивают всякие расширения и плагины для браузеров, дабы написать какие-то макросы, чтобы браузер делал действия за них. Зачем, когда есть Autoit ?
Скачивание и установка
Чтобы начать пользоваться и начать писать скрипты на Autoit нужно скачать программу-обработчик, ссылка на страницу скачивания: https://www.autoitscript.com/site/autoit/downloads/
На момент написания этой статьи версия Autoit была v3.3.14.5.
Дальше нам желательно скачать специальный текстовый редактор AutoIt Script, ссылка на скачивание установщика: https://www.autoitscript.com/site/autoit-script-editor/downloads/
Можно конечно пользоваться и NotePad++, он поддерживает синтаксис Autoit, но я предпочитаю оригинальный редактор.
Порядок установки такой:
- Скачиваем и устанавливаем сначала autoit-v3-setup.exe;
- Затем уже ставим редактор SciTE4AutoIt3.exe.
Если у вас 64-битная Windows, то выбираем «use native x64 tools by default», а если 32-битная, то оставляем как есть. Если же вы не знаете какая у вас Windows, также оставляем все как есть.
Также во время установки компилятора Autoit будет задан выбор, «run the script» и «edit the script», обязательно выбираем второй вариант, «edit the script, иначе каждый раз при открытия файла скрипта он будет запускаться, что нам не нужно.
После установки у нас в меню Пуск должен появиться пункт Autoit, заходим в него и выбираем Autoit Windows Info, открываем приложение.
Также после установки у вас в контекстном меню Windows (это то, что появляется по нажатию правой кнопки мыши) появится пункт «Создать -> Autoit V3 Script». Создаем такой файл, открываем его и попадаем в редактор.
Откройте этот пустой файл в оригинальном редакторе и увидите пару строк по умолчанию, это комментарии, все это можно удалить.
В утилите Autoit Windows Info, которую вы открыли до этого, жмем стрелку вправо до тех пор, пока не появится пункт «Mouse», который нам и будет нужен. Все остальное это для более серьезных вещей и не рассматривается в данном гайде.
Autoit Windows Info.
Основы Autoit
Итак, самое простое, как заставить курсор мыши бегать по экрану, кликать там где нужно, крутить колесиком мыши, щелкать правой кнопкой и тд. и тп. Основы синтаксиса и самые необходимые базовые конструкции я приведу ниже, все остальное найдете сами в интернете:
Sleep(время в миллисекундах), например, Sleep(30000) — останавливает исполнение кода на заданное время. В моем примере это 30.000 миллисекунд, что равно 30 секундам. Всегда ставим какую-нибудь задержку в самое начало кода, чтобы когда вы его запустили, у вас было время на переключение на нужное приложение и т.п.
MouseMove(x, y) — перемещение курсора мыши в заданные координаты Х и Y, измеряется в пикселях. Например,
MouseMove(150, 255) — переместит курсор в точку с координатами 150 пикселей по оси X (отступ слева) и 255 пикселей по оси Y (отступ сверху).
MouseClick(«какая кнопка», x, y, «сколько раз кликать, число») — как и впредыдущем случае перемещает курсор мыши в точку с координатами X и Y. Но также эта команда позволяет кликнуть по этим координатам, либо правой клавишей, либо левой, причем кликнуть нужное количество раз. Разберем на примере:
MouseClick(«left», 150, 255, 2) — команда кликнет 2 раза левой кнопкой мыши по точке с координатами 150 и 255 пикселей. Или:
MouseClick(«right», 150, 255, 1) — кликнет правой кнопкой мыши 1 раз по точке с координатами 150 и 255.
Резонный вопрос, а как мне понять какие координаты у точки, по которой надо кликнуть ? Для этого, в утилите Autoit Windows Info в разделе «Mouse» перетягиваем иконку курсора (1 на картинке) на нужное место и отпускаем. В поле «Position» (2) внизу увидим значения для X и Y, тогда как поле «Color» показывает цвет пикселя, на который наведен курсор мыши (в HEX формате):
Вкладка Mouse.
Важно ! Координаты X и Y отсчитываются конкретно под ваш монитор и ваше разрешение экрана. То есть, написав скрипт у себя дома, на работе он может кликать не туда куда нужно, обязательно нужно писать координаты под конкретное разрешение монитора.
Больше автоматизации, к примеру, как сделать, чтобы курсор гулял по какому-то сайту и периодически кликал по нужным местам, при этом не прописывая кучу строк MouseClick ? Для этого, как и в любом языке, есть понятие цикл. Приведу простые истины и углубляться в виды циклов не буду. Запомните это и пока хватит:
$i = 0
Do (делай)
...набор команд, любой код...
$i = $i + 1
Until (пока) $i = 5
Где $i — это переменная. Переменная пишется через знак доллара и может принимать как числовые, так и текстовые значения. Например, $abc = «техноблоггер» или $z = 25.54.
Do — инициирует начало цикла, а Until — его конец. Все что между ними будет исполняться столько раз, пока переменная $i не станет равной 5. В теле цикла (внутри Do…Until) мы видим запись
$i = $i + 1 — это счетчик, который прибавляет +1 к значению $i после каждой итерации цикла. Важно! Если этого не сделать, мы получим бесконечный цикл, который никогда не завершится и компьютер может зависнуть.
Пример:
$a = 0
Do
MouseClick("left", 150, 255, 1)
Sleep(1000)
MouseClick("left", 155, 269, 1)
Sleep(1500)
MouseClick("left", 120, 251, 1)
Sleep(3000)
$a = $a + 1
Until $a = 4
Этот скрипт будет кликать по одному разу по координатам и ожидать заданное количество времени между кликами. То есть, сначала будт клик по точке 150 — 255 пикселей, затем ждем секунду, далее клик по точке 155 — 269, ждем 1,5 секунды, и наконец клик по 120 — 251 и ждем уже 3 секунды. И эти действия будут повторены 5 раз, от 0 до 4. Можно написать $a = 1 и до $a = 5, в моем случае отсчет был от 0.
В самом начале цикл пробежал один раз и добавил +1 переменной $a, которая теперь стала равна 1: $a = 0 + 1, затем сравнил, выполнилось ли условие, что $a = 4 ? И так до тех пор, пока условие не выполнится и $a не станет равно 4.
Насчет Sleep, как я уже говорил, это просто задержка. Советую всегда ставить Sleep между конструкциями действий, например, перемещения мыши.
И последнее, операции условий (ветвления) или как хотите называйте.
If … Else (если … иначе).
If (в скобках пишутся условия или выражения) Then (тогда)
... набор строк или команд...
Else (иначе)
... набор строк или команд...
Endif (конец ветвления)
Причем, Else — необязательно, можно и без него. Пример:
If ($i = 4) Then
MouseClick("left", 150, 255, 1)
Else
MouseClick("right", 150, 255, 1)
Endif
Понятно, думаю. Если $i равно 4, то кликаем левой кнопкой мыши 1 раз по координатам 150, 255. Иначе (если $i не равно 4) кликаем правой кнопкой мыши 1 раз по координатам 150, 255.
К примеру, в созданиях ботов для игр в качестве условия может выступать цвет пикселя, на который наведен курсор. Как вы помните, в утилите кроме координат еще показывает цвет пикселя в HEX формате.
В моем примере на картинке это 0xF0F4F9 (значение можно скопировать CTRL + C).
А как получить цвет пикселя непосредственно в программе автоматически ? Для этого есть несколько способов, самый простой это конструкция:
PixelGetcolor (x, y) — эта запись присваивает код цвета пикселя по координатам x,y в текстовом формате. Пример:
$x = 27
$y = 445
$i = "0xF0F4F9"
MouseMove($x, $y)
$color = PixelGetColor($x, $y)
if ($i = $color) Then
MouseClick("left", 150, 255, 1)
Endif
Разберем. В переменных $x и $y лежат координаты соответственно для X и Y, куда будем перемещаться. Переменной $color присвоим значение, которое отдаст PixelGetColor. Дальше условие, если переменная $i = переменной $color, то кликаем левой кнопкой мышки 1 раз по нужным координатам.
Ну и напоследок, одной из кучи возможности Autoit является набор текста, вы можете послать в нужное место нужные набор символов.
Send(«текст») — отправляет слово «текст» в то место, где на данный момент находится курсор мыши.
Send(«{DOWN}») — нажмет клавишу «Стелка Вниз» на клавиатуре. Полный список набора клавиш можете найти в интернете.
Ну про колесико мыши упомяну:
MouseWheel(«куда крутить», «сколько крутить») — крутит колесико мыши вверх или вниз нужное количество раз. Например,
MouseWheel(«up», 10) или MouseWheel(«down», 15) — прокрутит колесико (скролл) мыши 10 раз вверх или 15 раз вниз.
Запуск скрипта
Ну хорошо, мы все написали, сохранили и хотим проверить. Как запустить скрипт Autoit на исполнение? Есть два способа:
- В редакторе нажимаем Tools -> Go (запуск), Tools -> Stop Executing (остановка);
- В редакторе жмем F5 (запуск) и CTRL + Break (остановка).
Если вы не расставите нужные задержки через Sleep, то не успеете остановить скрипт. Кстати, в редактор встроен отладчик, который подсветит красным неверный синтаксис и не даст запуститься скрипту, если в нем есть ошибки.
Писать можно долго, возможностей у языка очень много, это были просто основы для понимания. Если есть вопросы задавайте в комментариях. И не забывайте ставить Sleep.
AutoIt is a lightweight freeware BASIC-like scripting language designed for automating the Windows GUI and general scripting.
It is especially useful for generating keystrokes and reading information from native Windows controls. Library functions are included for the automation of Microsoft Office applications and web browsers.
It can be downloaded from https://www.autoitscript.com/site/autoit/, a site which also contains a comprehensive documentation set.
Hello World
A simple AutoIt script showing some of the basic features of the language.
Note that semicolons introduce comments
Save this as «HelloWorld.au3»
; Include constants. In this case, for the MsgBox() function
#include <MsgBoxConstants.au3>
; Define and initialize the title of a dialogue box
; All AutoIt variables are loosely typed
; Local specifies the scope
Local $title
$title = "Example Window"
; Alternative method of implicit definition
; This time also indicating constant
Const $text = "Hello World"
; Third example definition
; Strings and integers defined in the same manner
$timeout = 30
; Create dialogue box using #included constants
MsgBox($MB_ICONINFORMATION, $title, $text, $timeout)
; Program end - Use of Exit is not mandatory
Exit
This will produce a simple output:-
Installation or Setup
AutoIt is intended for use on the Microsoft Windows operating system. It is compatible with versions from Windows XP onwards.
Download the installation utility from https://www.autoitscript.com/site/autoit/downloads/
If installing on a 64-bit version of Windows, the user is prompted to choose a 64- or 32-bit installation. The choice affects the compilation utilities that are installed alongside the script interpreter.
The installation utility will install into the given directory:
- The script interpreter
- A script compiler
- A script editor (SciTE)
- Help files
- Examples
AutoIt v3: краткое руководство
by Andy Flesner
Copyright © 2007 O’Reilly Media, Inc.
ISBN: 978-0-596-51512-6 Released:
September 14, 2007
На русский язык перевёл Затеев Константин
AutoIt становится все более и более популярным в среде системного администрирования как инструмент автоматизации возникающих задач. Помимо этого, AutoIt возможно использовать для автоматизации ряда задач в системе Windows. Этот мощный язык сценариев может запустить любую программу и управлять процессом ввода команд с мыши и клавиатуры. При помощи инструмента RunAs системные администраторы могут осуществлять «тихие» установки программного обеспечения и изменять его конфигурацию, используя встроенные функции администрирования. Это руководство содержит основы языка AutoIt v3. Вы узнаете о переменных и вложениях, графическом интерфейсе пользователя, пользовательских функциях, операторах цикла и условных выражениях. Полученную теорию Вы примените в примерах, связанных с системным администрированием. Приведенные в данной книге примеры могут быть использованы на практике: от модификации игр до создания сценария входа в систему.
Оглавление Введение в AutoIt и его история…… 2
Переменные и вложения …………… 2
Графический интерфейс
пользователя (GUI) ……………………….. 10
Автоматизация приложений ………. 35
Заключение …………………………………… 55
Введение в AutoIt и его история
AutoIt стартовал в конце 1998 г. как программа на языке Си для автоматизации
процесса нажатия клавиш клавиатуры во время установки программного
обеспечения. В январе 1999 г. команда AutoIt выпустиля AutoIt v1, который включал
следующие функции: Send, Run, RunWait, WinWait, WinWaitClose, WinWaitActive,
WinHide, WinActivate, WinClose, WinRestore, Sleep и SetKeyDelay. AutoIt v2 был
выпущен в августе того же года и содержал первую версию AutoItХ, который
предложил управление DLL/COM. За следующие два года к AutoIt v2 было
добавлено много новых функций. В мае 2001, исходный код AutoIt был полностью
переписан в C++, а в 2003 году, была выпущена бета-версия AutoIt v3. До фефраля
2004 г. было выпущено более 100 бета-версий AutoIt v3. Февраль 2005 г.
ознаменовался выпуском AutoIt v3.1.0, который добавил возможности графического
интерфейса пользователя (GUI). Эта версия стала самой известной, что выдвинуло
AutoIt на первый план среди программ для написания скриптов и сделало его
конкурентом Visual Basic Scripting, пакетным файлам и другим языкам для
написания сценариев. AutoIt является свободно распространяемой программой и
пользуется большой популярностью.
Данное руководство готовилось для AutoIt v3.2.4.9, представленного 25.05.2007 г.
Скачать последнюю версию AutoIt можно по приведенной ссылке:
http://www.autoitscript.com/autoit3/downloads.php
Для редактирования скриптов я рекомендую использовать SciTE AutoIt3 Editor. Он
включает обширный справочный материал и удобную цветную подсветку кода.
Последнюю версию SciTE AutoIt3 Editor можно скачать здесь:
http://www.autoitscript.com/autoit3/scite/downloads.php
Переменные и вложения Переменная — просто именованный адрес расположения строки или массива
данных. Вы можете использовать переменную в пределах сценария неограниченное
количество раз, при этом ее требуется объявить только один раз. Это дает
возможность управлять и манипулировать локальными данными.
Переменные необходимы, если Вы хотите писать работоспособные сценарии,
пригодные для быстрой модификации. Например, определив путь расположения
файла как переменную, Вы можете в дальнейшем изменять его без необходимости
правки множества статических записей. Использование статического ввода данных
может привести к определенным трудностям. Пример 1 описывает установку двух
обновления системы защиты Windows XP. Пример 2 выполняет те же самые
операции, но делает это с использованием переменных. Вы еще можете не понять
код в данных примерах; они приведены, чтобы показать, что замена имен файлов
переменными является одним из способов оптимизации кода.
Пример 1. Автоматическое обновление Windows
If @Username <> «Administrator» Then
RunAsSet(«Administrator»,@ComputerName,»password»)
install()
RunAsSet()
Else
install()
EndIf
Func install()
RunWait(«Windows Update l.exe /passive /norestart»)
RunWait(«Windows Update 2.exe /passive /norestart»)
EndFunc
Пример 2. Автоматическое обновление Windows с использованием переменных Global $admin, $password, $program, $program2
$admin = «Administrator»
$password = «password» ; ввод пароля учетной записи Администратора
$program = «Windows Update 1.exe /passive /norestart»; указание файлов с обновлениями
$program2 = «Windows Update 2.exe /passive /norestart»
If @Username <> «Administrator» Then
RunAsSet($admin,@ComputerName,$password) install()
RunAsSet()
Else
install()
EndIf
Func install()
RunWait($program)
RunWait($program2)
EndFunc
Обратите внимание на то, как изменение имен переменных, перечисленных в
объявлениях переменной, может изменить название программы. Эта тонкость
станет полезной при разработке более сложных сценариев.
Типы переменных—Dim, Global и Local Здесь описаны три типа переменных AutoIt:
Dim (переменная с неявной областью видимости)
Декларация (объявление) данной переменной определяется ключевым словом
и его текущим положением в скрипте. Если переменная объявлена вне тела Dim
функции, то она является глобальной.
В следующем примере объявляется переменная в глобальной зоне видимости.
Она запускает setup.exe из директории расположения скрипта:
Dim $variable = @ScriptDir & «setup.exe»
Run($variable)
В следующем примере показано объявление глобальной переменной внутри
локальной функции. При выполнении функции переменная уничтожается.
Результатом данного кода служит сообщение об ошибке, так как $variable не
объявлена глобально:
function() Func function()
Dim $variable = @ScriptDir & «setup.exe»
EndFunc
Run($variable)
Переменные с неявной областью видимости необходимо объявлять так, чтобы
глобальные и локальные переменные не конфликтовали. Если переменная
объявляется в функции, когда существует глобальная переменная, то последняя
перезаписывается. Следующий пример показывает, что происходит с
имеющейся глобальной переменной, когда та же самая переменная объявляется
в пределах функции. В результате этих действий выполняется setupbad.exe
вместо ; глобальная setup.exe $variable изменяется и принимает значение
, потому что переменная была объявлена локально в пределах setupbad.exe
функции:
Global $variable = @ScriptDir & «setup.exe»
function() Func function()
Dim $variable = @ScriptDir & «setupbad.exe» EndFunc Run($variable)
Global (глобальная переменная)
Этот тип переменной может быть записан и считан из любой части скрипта.
Глобальные переменные могут использоваться в функциях, не уничтожаясь при
их завершении. Пример объявления глобальной переменной:
Global $variable = 2
Local (локальная переменная)
Локальная переменная используется только в пределах функции. Как только
функция выполнена, переменная уничтожается. Если глобальная
Переменная с таким же именем уже существует при выполнении функция
изменяет ее, таким образом данные из локальной переменной не уничтожаются,
а передаются в глобальную переменную. Переменные сначала всегда
проверяются в локальном контексте, затем в глобальной области видимости.
Следующий пример показывает использование локальной переменной в
пределах функции:
function() Func function()
Local $variable = @ScriptDir & «setup.exe»
Run($variable)
EndFunc
Явное объявление переменных в AutoIt необязательно
AutoIt не требует явного объявления переменных. Однако, для упрощения
дальнейшей отладки, целесообразно объявить все переменные явно. Если этого не
сделать, может стать очень трудным найти введенное с опечаткой имя переменной,
которое может вызывать ошибку при выполнении сценария. Для обязательности
явного объявления переменных можно включить в скрипт следующий код:
Opt(«MustDeclareVars», 1)
С этой опцией все переменные должны быть явно объявлены с помощью Global,
Local или Dim.
Constants (константы)
Константа — переменная, которая никогда не изменяется. Она остается неизменной
во время выполнения сценария. Вы не можете изменить значение константы, и не
можете преобразовать существующую переменную в константу. Ключевое слово
, помещенное после , или делает переменную константой. Const Dim Global Local
Возможно создать константу и без явного объявления. Следующий пример
иллюстрирует, как объявить константу в каждом сценарии:
Const $example = 0
Dim Const $example1 = 1
Global Const $example2 = 2
Local Const $example3 = 3
Arrays (массивы)
Массив — это набор данных, в котором все элементы имеют одинаковый тип данных
и размер. Например, массив двух чисел — ―5‖ и ―3‖ — объявлен следующим образом:
$num[0] = «5»
$num[1] = «3»
Массивы могут быть многомерными, вплоть до 64 уровней. В примере 3 показан
двумерный массив (визуальное изображение для примера 3 смотри на рисунке 1):
Пример 3. Двумерный массив
$letter[0][0] = «w»
$letter[0][i] = «x»
$letter[l][0] = «y»
$letter[i][i] = «z»
Массив с типом данных Variant
Массив, использующий различные типы данных, объявляется как и может Variant
содержать данные от числа до Булева значения. Тип данных Variant не запрещается
в AutoIt; однако, его использование не рекомендуется. Используя отличающиеся
типы данных в массивах массива особенно в пределах массива — может существенно
уменьшить скорость выполнения Ваших сценариев.
Подключение вложенных элементов
Директива подключает файлы, которые содержат предварительно Include
записанные функции. Воспринимайте их как функции, записанные в Ваш скрипт,
которые можно вызвать для выполнения необходимых действий. Вы можете
использовать эти файлы, добавляя их к скрипту следующим образом:
#include <имя файла au3>
Таблица 1 содержит перечень и описание стандартных элементов, поставляемых
совместно с AutoIt v3, которые можно вложить в Ваш скрипт.
Рисунок 1. Визуальное представление Примера 3. Двумерный массив
Таблица 1. Подключаемые пользовательские элементы, поставляемые с AutoIt v3
Файл Описание
Array.au3 Управление массивами
AVIConstants.au3 AVI — константы
ButtonConstants.au3 Константы для кнопок
Color.au3 Управление цветопередачей
ComboConstants.au3 Константы для ComboBox
Constants.au3 Набор констант AutoIt
Date.au3 Управления выводом даты и времени
DateTimeConstants.au3 Константы для отражения даты и времени
EditConstants.au3 Константы редактора
File.au3 Функции для операций с файлами и директориями
GuiCombo.au3 Управление ComboBox
GUIConstants.au3 Константы, относящиеся к GUI
GUIConstantsEx.au3 Константы, используемые в GUI приложений
GUIDefaultConstants.au3 Настройки стиля GUI по умолчанию
GuiEdit.au3 Управление настройками редактирования
GuiIPAddress.au3 Создание пользовательских настроек IP-адреса
GuiList.au3 Управление Listbox
GuiListView.au3 Управление ListView
GuiMonthCal.au3 Управление календарем
GuiSlider.au3 Управление настройками «ползунка»
GuiStatusBar.au3 Управление панелью состояния
GuiTab.au3 Управление табуляцией
GuiTreeView.au3 Управление TreeView
IE.au3 Библиотеки автоматизации Internet Explorer для
AutoIT v3
Inet.au3 Управление настройками Internet
ListBoxConstants.au3 Константы ListBox
ListViewConstants.au3 Константы ListView
Math.au3 Функции для математических расчетов
Memory.au3 Управление памятью
FileInstall — подключение файлов к скриптам AutoIt
Функция FileInstall() позволяет подключить любой файл, например,
исполняемый файл или файл изображения, к скомпилированному исполнимому
файлу сценария. Данная функция подобна директиве , но в большинстве #include
случаев подключение дополнительных элементов существенно увеличивает размер
скомпилированного исполнимого файла. Функция FileInstall() имеет
следующий синтаксис:
FileInstall («исходный_файл», «место_назначения» [flag])
Флаги являются дополнением к функции . Флаг запрещает FileInstall() 0
функции перезаписывать существующие файлы. Флаг используется для 1
перезаписи встречающихся в скрипте файлов. Исходный файл не может быть
переменной; это должен быть элемент типа (строка), который не должен string
содержать знаки подстановки.
Пример 4 содержит код, использующий функцию , которая FileInstall()
извлекает установочные файлы программы во временный каталог. После
компиляции мы получаем инсталлятор в виде единого исполнимого файла.
Файл Описание
Misc.au3 Управление диалогами
Process.au3 Управление процессами
ProgressConstants.au3 Константы состояния
SliderConstants.au3 Константы «бегунка»
Sound.au3 Управление звуковыми файлами
SQLite.au3 Управление базами данных SQLite
SQLite.dll.au3 Встроенная библиотека SQLite3.dll
StaticConstants.au3 Статичные константы
StatusBarConstants.au3 Константы строки состояния
String.au3 Строковые функции
TabConstants.au3 Константы табуляции
TreeViewConstants.au3 Константы TreeView
UpDownConstants.au3 Константы UpDown
Visa.au3 VISA (шина GPIB и протокол TCP)
WindowsConstants.au3 Константы Windows
Пример 4. Использование функции FileInstall()
#NoTrayIcon
Opt(«MustDeclareVars», 1)
FileInstall(»C:Documents and SettingsAdministratorDesktopProgram» & _
«Setup.exe», @TempDir & «Setup.exe», 1)
FileInstall(«C:Documents and SettingsAdministratorDesktopProgram» & _
«Setup.exe», @TempDir & «setup.ico», 1)
FileInstall(«C:Documents and SettingsAdministratorDesktopProgram» & _
«Setup.exe», @TempDir & «setup.ini», 1)
FileInstall(«C:Documents and SettingsAdministratorDesktopProgram» & _
«Setup.exe», @TempDir & «program.dll», 1)
FileInstall(«C:Documents and SettingsAdministratorDesktopProgram» & _
«Setup.exe», @TempDir & «readme.txt», 1)
Run(@TempDir & «Setup.exe»)
WinWait(«Installation Wizard», «Welcome to the»)
If Not WinActive(«Installation Wizard», «Welcome to the») Then _
WinActivate(«Installation Wizard», «Welcome to the»)
WinWaitActive(«Installation Wizard», «Welcome to the»)
ControlClick(«Installation Wizard», «», «Next»)
WinWait(«Installation Wizard», «Installation Complete»)
If Not WinActive(«Installation Wizard», «Installation Complete») Then _
WinActivate(«Installation Wizard», «Installation Complete»)
WinWaitActive(«Installation Wizard», «Installation Complete»)
ControlClick(«Installation Wizard», «», «Finish»)
В этом примере функция FileInstall() копирует пять файлов во временную
директорию, затем команда Run() запускает файл . Программа ожидает Setup.exe
появления мастера установки, прописанного в функции и передает ему WinWait()
управление с помощью функции , после чего ожидается нажатие на WinActivate()
кнопку (функция ), а по окончании установки ожидается Next ControlClick()
нажатие на кнопку . Finish
Перенос длинных строк
Нижнее подчеркивание сигнализирует, что текущая строка кода ( _ )
продолжается на следующей строке. Этот подход делает код более читаемым и
облегчает обработку длинных строк, не вмещающихся на экран, при
редактировании скрипта. Разделяемая строка должна быть закрыта и соединена
со следующей строкой, как показано в этом примере:
Неверно:
«строка _ продолжение строки»
Верно:
«строка» & _ «продолжение строки»
Графический интерфейс пользователя (GUIs)
Одна из новейших функций AutoIt — возможность создания графического
интерфейса пользователя. Эта функция добавляет экстраординарное количество
возможностей на язык AutoIt. Некоторые из наиболее популярных способов
использования GUI — создание меню установки, входных форм и строк состояния.
Я начинаю этот раздел с примера, таким образом, Вы сможете увидеть порядок создания
GUI и ознакомиться с функциями, используемыми для создания GUI. Пример 5 создает две
кнопки с инструкциями и изображением. Этот пример может быть модифицирован и для
других задач, где требуется селектор с двумя кнопками, например установщик для двух
различных программ, селектор для двух различных учетных записей пользователей, и т.д.
Вы можете легко увеличить размер кода и создать большее количество кнопок. Позже, на
примере 8 Вы изучите возможности каждой функции GUI и правила их конфигурации.
Пример 5. Графический интерфейс пользователя ; Подключаем вложенные GuiConstants (необходимы для использования функций GUI) #include <GuiConstants.au3>
; скрываем иконку в трее
#NoTrayIcon
; Настройка опций режима показа системных событий OnEvent()
Opt(‘GUIOnEventMode’, 1)
; Создание GUI
GuiCreate(«Ai Smart Homes — Saint Louis, Missouri», 400, 300)
GuiSetIcon(«icon.ico»)
; Запуск функции GUIExit() при закрытии GUI
GUISetOnEvent($GUI_EVENT_CLOSE, ‘GUIExit’)
; Логотип / изображение GuiCtrlCreatePic(«logo.jpg»,120,5,156,160)
; Инструкции
GUICtrlCreateLabel(»Please Choose an Option Below:», 50, 180, 300, 15,
$SS_CENTER) GUICtrlSetColor(-1,0xFF0000) ; цвет инструкций (здесь — красный)
; Кнопка 1
GUICtrlCreateButton(«Visit Our Website», 100, 210, 200, 30)
GUICtrlSetOnEvent(-1, ‘website’) ; При нажатии запускается website()
; Кнопка 2
GUICtrlCreateButton(«Send an Email», 100, 250, 200, 30)
GUICtrlSetOnEvent(-1, ’email’) ; При нажатии запускается email()
Рисунок 2. Результат выполнения скрипта из примера 5
Func website()
; Скрыть GUI на время выполнения функции
GUISetState(@SW_HIDE)
Run(«C:Program FilesInternet Exploreriexplore.exe «) www.aismarthomes.com
Exit
EndFunc
Func email()
Скрыть GUI на время выполнения функции ;
GUISetState(@SW_HIDE)
Run(«mailto:[email protected]»)
Exit
EndFunc
Показать GUI после завершения выполнения функции ;
GUISetState(@SW_SHOW)
Бездействие скрипта во время выполнения цикла – эта функция ДОЛЖНА БЫТЬ ПОДКЛЮЧЕНА ;
OnEvent
mode While 1
Sleep(500)
Wend
Эта функция заставляет выйти из скрипта при закрытии GUI ;
Func GUIExit()
Exit
EndFunc
Рисунок 2 показывает интерфейс, созданный в примере 5. Вложенный logo.jpg
находится в том же самом каталоге, что и файл сценария. После компиляции
логотип выводится на форме GUI — интерфейса.
Комментарии в скрипте
Комментарии в сценариях AutoIt могут быть оформлены двумя способами:
1. Точка с запятой. Точка с запятой обозначает начало комментария на
одной строке. После точки с запятой на этой же строке идет собственно
комментарий. Если комментарий необходимо продолжить на следующей
строке, необходимо снова поставить точку с запятой, иначе, во время
выполнения скрипта вероятны ошибки.
2. #comments-start и #comments-end (также обозначаются как ). #cs и #ce
Эти команды используются для создания многострочных комментариев.
Начинается комментарий с или #comments-start #cs , а заканчивается с помощью #comments-end или . #ce
События GUI
Как назначить и обработать событие, которое должно произойти при нажатии кнопки на Вашей форме GUI? Есть два режима обработки событий, способных вызвать определенное действие в скрипте при нажатии кнопки:
1. MessageLoop (режим обработки событий в цикле сообщений). Этот режим используется по умолчанию; он заставляет GUI реагировать на события, вызывающие функцию . Данную функцию рекомендуется GuiGetMsg()вызывать с помощью цикла множество раз в секунду; в противном случае созданный пользовательский интерфейс будет медленно работать. Следующий цикл непрерывно вызывает функцию , пока не нажата одна из двух GuiGetMsg()кнопок, или пользователь не пытается закрыть форму:
While 1
$guimsg = GuiGetMsg()
Select
Case $guimsg = $GUI_EVENT_CLOSE
Exit ; закрытие интерфейса
Case $guimsg = $button1
button1(); выполнение одной функции
Case $guimsg = $button2
button2(); выполнение другой функции
EndSelect
Wend
Обратите внимание, что приведенный цикл бесконечен (он имеет значение ; 1
более подробно об этом будет рассказано в разделе, посвященном условным
операторам и циклам). Переменная $guimsg будет непрерывно обновляться
функцией , пока не будет выполнено одно из трех условий. Выбор GuiGetMsg()
или приводит к запуску соответствующей функции. Button1 Button2Закрытие GUI – интерфейса приводит к выходу из программы. Пример 6
вводит GuiGetMsg() в состав полностью функционального скрипта.
Пример 6. Метод GuiGetMsg()
; Подключение GuiConstants (необходимо для использования GUI-функций)
#include <GuiConstants.au3>
; Создание GUI
GuiCreate(«Menu», 400, 150)
; Кнопка 1
$button1 = GUICtrlCreateButton(»Button1″, 100, 20, 200, 30)
; Кнопка 2
$button2 = GUICtrlCreateButton(»Button2″, 100, 70, 200, 30)
; Показать GUI после создания
GUISetState(@SW_SHOW)
Func Function1()
; Скрыть GUI на время выполнения функции
GUISetState(@SW_HIDE)
; ==================================================
; Скрипт, аналогичный составленному для Кнопки 1
; ==================================================
EndFunc
Func Function2()
; Скрыть GUI на время выполнения функции
GUISetState(@SW_HIDE)
; ==================================================
; Скрипт, аналогичный составленному для Кнопки 2
; ==================================================
EndFunc
While 1
$guimsg = GuiGetMsg()
Select
Case $guimsg = $GUI_EVENT_CLOSE
Exit ; выход из GUI
Case $guimsg = $button1
function1() ; выполнение кода для Button1
function Case $guimsg = $button2
function2() ; выполнение кода для Button2
function EndSelect WEnd
2. OnEvent (режим обработки прерываний). Описанный в AutoItSetOption
( ) режим обычно приостанавливает выполнение ‘GUIOnEventMode’,1 OnEvent
скрипта, если что-либо активировано на форме пользователя, и выполняет
соответствующую функцию. Как только функция завершена, выводится резюме
скрипта. Пример 7 демонстрирует, возможность использования режима OnEvent
в сценарии, подобном скрипту в примере 6.
Пример 7. Метод GUIOnEventMode
; Подключение GuiConstants (необходимо для использования GUI-функций)
#include <GuiConstants.au3>
; Настройка режима OnEvent
Opt(‘GUIOnEventMode’, 1)
; Создание GUI
GuiCreate(«Menu», 400, 150)
; Запуск функции GUIExit() при закрытии формы
GUISetOnEvent($GUI_EVENT_CLOSE, ‘GUIExit’)
; Кнопка 1
GUICtrlCreateButton(»Button1″, 100, 20, 200, 30)
GUICtrlSetOnEvent(-1, ‘Function1’) ; запуск Function1 при нажатии
; Кнопка 2
GUICtrlCreateButton(»Button2″, 100, 70, 200, 30)
GUICtrlSetOnEvent(-1, ‘Function2’) ; Запуск function2 при нажатии
Func Function1()
; Скрыть GUI на время выполнения функции
GUISetState(@SW_HIDE)
; ==================================================
; Скрипт, аналогичный составленному для Кнопки 1
; ==================================================
EndFunc
Func Function2()
; Скрыть GUI на время выполнения функции
GUISetState(@SW_HIDE)
; ==================================================
; Скрипт, аналогичный составленному для Кнопки 2
; ==================================================
EndFunc
; Показать GUI после выполнения функции
GUISetState(@SW_SHOW)
Рисунок 3. Вывод результатов работы скриптов из примера 6 и примера 7
; Бездействие скрипта во время выполнения цикла – эта функция ДОЛЖНА БЫТЬ
; ПОДКЛЮЧЕНА во время режима OnEvent
While 1
Sleep(500)
WEnd
; Данная функция создает скрипт при закрытии формы
Func GUIExit()
Exit
EndFunc
Здесь также присутствует цикл , как и в режиме . На сей раз, While 1 MessageLoop
вместо обновления переменной с помощью , режим GuiGetMsg() OnEvent
обновляет функцию , пока не произойдет ожидаемое событие Sleep(500)
(функция отключает выполнение скрипта на определенное время, в конкретном
случае таймаут равен 500 миллисекунд). При нажатии кнопок на
пользовательской форме будет выполнена прописанная функция. При
закрытии пользовательской формы исполнение скрипта будет прекращено.
Пример 6 и пример 7 создают пользовательскую форму, показанную на
рисунке 3. Оба сценария выполняют аналогичные действия, но каждый
использует различный режим реагирования на события.
Создавая GUI, требуется определить, какой режим реагирования на события
является более предпочтительным. Оба подхода являются работоспособными,
но более подходит для скриптов, где GUI — интерфейс постоянно MessageLoop
находится в фокусе ввода. В скриптах, где GUI — интерфейс не находится в
фокусе ввода, либо используется только периодически, предпочтительнее
использовать режим . В конце-концов, оба метода выполняют OnEvent
одинаковый набор задач, различаются лишь способы их выполнения. Выбор
между режимами и в большинстве случаев зависит OnEvent MessageLoop
только от личных предпочтений.
Элементы управления GUI
Таблица 2 содержит список элементов управления, доступных в AutoIt, их описания
и ассоциированные с ними функции.
Таблица 2. Элементы управления графическим интерфейсом пользователя
Элемент Описание Функция
AVI Video Clip Вставка видеоклипа типа *.avi GuiCtrlCreateAvi()
Button Создание кнопки GuiCtrlCreateButton()
Checkbox Создание панели выбора элементов
GuiCtrlCreateCheckbox()
Combo Box Создание комбинированного окна
GuiCtrlCreateComboBox()
Context Menu Создание контекстного меню, появляющегося при клике правой кнопкой мыши
GuiCtrlCreateContextMenu()
Date Управление параметрами даты GuiCtrlCreateDate()
Dummy Создание модели собственного элемента
GuiCtrlCreateDummy()
Edit Создание панели редактирования
GuiCtrlCreateEdit()
Group Создание панели управления GuiCtrlCreateGroup()
Icon Создание иконки GuiCtrlCreateIcon()
Input Создание поля ввода GuiCtrlCreateInput()
Label Создание надписи GuiCtrlCreateLabel()
List Создание простого списка GuiCtrlCreateList()
List View Создание списка GuiCtrlCreateListView()
List View Item Создание элемента списка GuiCtrlCreateListViewItem()
Menu Создание меню GuiCtrlCreateMenu()
Menu Item Создание пункта меню или контекстного меню
GuiCtrlCreateMenuItem()
Object— ActiveX Создание объекта ActiveX GuiCtrlCreateObj()
Picture Вставка изображения GuiCtrlCreatePic()
Progress Bar Создание строки состояния GuiCtrlCreateProgress()
Radio Button Создание кнопки выбора GuiCtrlCreateRadio()
Slider Создание «ползунка» GuiCtrlCreateSlider()
Tab Создание раздела табуляции GuiCtrlCreateTab()
Tab Item Создание элемента в разделе табуляции
GuiCtrlCreateTabItem()
Tree View Создание структуры в виде дерева элементов
GuiCtrlCreateTreeView()
Пример 8 содержит модель использования в AutoIt элементов управления GUI. Код
данного примера снабжен соответствующими комментариями. Для получения
большего количества сведений об элементах управления ознакомьтесь со
справочной информацией и файлом помощи AutoIt.
Пример 8. Набор элементов управления GUI
#include <GuiConstants.au3>
; GUI Creation
GuiCreate(«GUI Control Examples», 500, 420)
GuiSetIcon(@WindowsDir & «explorer.exe», 0)
; Menu Creation
$filemenu = GUICtrlCreateMenu(«File»)
GUICtrlCreateMenuitem(«Example File Menu Item»,$filemenu)
; Context Menu
$contextmenu = GUICtrlCreateContextMenu()
; Context Menu Item
GUICtrlCreateMenuitem(«Example1»,$contextmenu)
GUICtrlCreateMenuitem(«»,$contextmenu) ; separator
GUICtrlCreateMenuitem(«Example2»,$contextmenu)
; Tab Creation
GUICtrlCreateTab(0,0,500,400)
; Tab 1 Creation
; ==============
GUICtrlCreateTabItem(«AVI,Button,Checkbox,ComboBox»)
; AVI
GUICtrlCreateAvi(@WindowsDir & «clock.avi»,-1,10,30,321,321,$ACS_AUTOPLAY)
GUICtrlCreateLabel(«AVIExample»,140,355,60,15)
; Button
GUICtrlCreateButton(«Button Example»,350,30,120,30)
; Checkbox
GUICtrlCreateCheckbox(«Checkbox Example»,350,70,120,30)
; Combo Box
GUICtrlCreateCombo(«ComboBox Example»,350,110,120,30)
Элемент Описание Функция
Tree View Item Добавление элемента в дерево элементов
GuiCtrlCreateTreeViewItem()
Up / Down Создание элемента up/down GuiCtrlCreateUpdown()
; Tab 2 Creation
; ==============
GUICtrlCreateTabItem(«Group,Date,Dummy,Edit,Icon,Input,List,ListView»)
; Start Group
GUICtrlCreateGroup(«Group Example»,20,40,460,60)
; Date
GUICtrlCreateDate(«»,30,60,200,25)
; Dummy
$dummybutton = GUICtrlCreateButton(«Dummy Example»,270,60,200,25)
$dummy = GUICtrlCreateDummy()
; Close Group
GUICtrlCreateGroup(«»,-99,-99,1,1)
; Edit
GUICtrlCreateEdit(«Edit Example»,30,120,440,60)
; Icon
GUICtrlCreateIcon(@WindowsDir & «Cursorsdrum.ani»,-1,30,200,32,32)
GUICtrlCreateLabel(«Icon Example»,70,210,80,20)
; Input
GUICtrlCreateInput(»Input Example»,160,205,300,20)
; List
GUICtrlCreateList(«List Example»,30,240,440,80)
; List View
$listview = GUICtrlCreateListView(«List View Example»,30,330,440,60)
; List View Item
GUICtrlCreateListViewItem(»List View Item Example»,$listview)
; Tab 3 Creation
; ==============
GUICtrlCreateTabItem(«ActiveX Object»)
; ActiveX Object
GUICtrlCreateLabel(«ActiveX Object Example»,l0,30,l40,20)
$ie = ObjCreate(«Shell.Explorer.2»)
$GUIActiveX = GUICtrlCreateObj($ie,l0,50,480,340)
$ie.navigate(«http://www.aismarthomes.com»)
; Tab 4 Creation
; ==============
GUICtrlCreateTabItem(«Picture,Progress,Radio,Slider,TreeView,Updown»)
; Picture
GUICtrlCreatePic(@WindowsDir & «Blue Lace I6.bmp»,l0,30,40,40)
GUICtrlCreateLabel(»Picture Example»,55,45,80,20)
; Progress Bar
GUICtrlCreateLabel(«Progress Example»,400,70,90,20)
$progress = GUICtrlCreateProgress(l0,90,480,25)
GUICtrlSetData($progress,33)
; Radio
GUICtrlCreateRadio(«Radio Example»,l0,l40,90,20)
; Slider
GUICtrlCreateLabel(»Slider Example»,290,l70,l00,20)
GUICtrlCreateSlider(l80,l30,280,30)
; Tree View
GUICtrlCreateLabel(«Tree View Example»,l0,200,l20,20)
$treeview = GUICtrlCreateTreeView(l0,220,480,60)
; Tree View Item
$treetoplevel = GUICtrlCreateTreeViewItem(«Tree View Example»,$treeview)
GUICtrlCreateTreeViewItem(«Subiteml»,$treetoplevel)
GUICtrlCreateTreeViewItem(«Subitem2»,$treetoplevel)
; Up/Down
GUICtrlCreateLabel(«Example Updown»,l0,300,l00,20)
$updowninput = GUICtrlCreateInput(«0»,10,320,480,60)
GUICtrlCreateUpdown($updowninput)
; Close Tabs
GUICtrlCreateTabItem(«»)
; Display GUI
GuiSetState(@SW_SHOW)
; Цикл проверки событий элементов управления GUI
While 1
$guimsg = GUIGetMsg()
Select
Case $guimsg = $dummybutton
GUICtrlSendToDummy($dummy)
Case $guimsg = $dummy
MsgBox(0,»Dummy Example»,»You have clicked the dummy button.»)
Case $guimsg = $GUI_EVENT_CLOSE
Exit
EndSelect
Wend
Рисунок 4. Набор выведенных элементов управления GUI
Если выполнить скрипт из примера 8, то будут созданы четыре формы с
элементами управления пользовательским интерфейсом (см. рисунок 4).
Обращение с данными
При создании графического интерфейса пользователя необходимо назначить
переменные для всех элементов управления, впоследствии их можно использовать в
качестве значений в функциях. Например, при создании комбинированного списка
мы создаем переменную и в качестве ее значения указываем соответствующую
функцию; это позволяет считать данные из созданного комбинированного списка
во время выполнения функции . Пример 9 показывает, как GuiCtrlRead()
выполнить событие, основанное на значении из комбинированного списка:
Пример 9. Функция GuiCtrlRead()
#include <GuiConstants.au3>
; GUI
GuiCreate(«Combo Example»,200,80)
; Combo Box
$combobox = GuiCtrlCreateCombo(«Notepad»,l0,l0,l20,20)
GuiCtrlSetData(-l,»Paint|Command Prompt»)
; Button
$button = GuiCtrlCreateButton(«Go»,l0,40,60,20)
Рисунок 5. Результат выполнения примера 9
GUISetState(@SW_SHOW)
; Проверка событий в теле цикла
While 1
$guimsg = GUIGetMsg
Select
Case $guimsg = $button
MsgBox(0,»»,»You chose » & GUICtrlRead($combobox) & «.»)
Select
Case GUICtrlRead($combobox) = «Notepad»
Run(«notepad.exe»)
Exit
Case GUICtrlRead($combobox) = «Paint»
Run(«mspaint.exe»)
Exit
Case GUICtrlRead($combobox) = «Command Prompt»
Run(«cmd.exe»)
Exit
EndSelect
Case $guimsg = $GUI_EVENT_CLOSE
Exit
EndSelect
Wend
С помощью структуры Select…Case отслеживаются события, происходящие в
функции . В свою очередь эта структура вложена в GUICtrlRead($combobox)
аналогичную структуру, управляемую функцией . Пример 9 создает GUIGetMsg()
комбинированный список, показанный на рисунке 5.
Пользовательские функции Функции могут быть вызваны в скрипте в любое время. AutoIt поставляется с
набором заранее определенных функций, призванных решать установленный круг
задач. Сообществом AutoIt, целью повышения его функциональности, также
создается множество пользовательских функций. Для использования
пользовательских функций в скрипте необходимо воспользоваться командой
. Вы можете создавать и свои собственные функции. #include
Создание функций — Func, Return, EndFunc Синтаксис пользовательских функций выглядит следующим образом:
Func functioname ( [Const] [ByRef] $paraml, …, [Const] [ByRef]
$paramN,_
$optionalparl = value, …)
…
[Return [value]]
EndFunc
В следующих разделах разъясняется назначение компонентов функций.
Const (константа) и ByRef (переход по ссылке) Ключевые слова и могут одновременно применяться к одному и тому Const ByRef
же параметру, причем порядок, в котором они записаны, не имеет никакого
значения. При использовании и необходимо помнить: Const ByRef
параметр является опциональным и применяется только к объявленным Const
переменным, причем переменную-константу можно передать в функцию только
с помощью -параметра. Const
параметр также является опциональным, в качестве его значения может ByRef
быть только переменная. При использовании этого параметра, все изменения
передаются в исходную переменную. По умолчанию, внутри функции
используется копия переменной.
Параметры функции
Например, нижеприведенная функция использует переменные со значениями по
умолчанию, она может быть вызвана с пустыми параметрами как , при function()
этом будут использованы значения по умолчанию. После выполнения функции
открывается окно сообщения подтверждающее, что значение переменной $z
является : 5
Func function($x = 2, $y = 3)
$x + $y = $z
MsgBox(0,»$z’s value»,$z)
EndFunc
Переменные могут быть объявлены по-разному, но значения по умолчанию при
вызове функции используются только в том случае, если ее параметры явно не
определены. Когда функция изменяется в ходе исполнения, переменные должны
быть явно объявлены при вызове функции. Примером корректного вызова
нижеприведенной функции является , в результате окно сообщения function(5,3)
выведет на экран значение . Если или не объявлены явно, функция не будет 8 $x $y
исполняться должным образом:
Func function($x, $y)
$x + $y = $z
MsgBox(0,»$z’s value»,$z)
EndFunc
Return Команда Return используется, чтобы выйти из функции. При завершении работы функция по умолчанию возвращает значение , но возвращаемое значение может 0
быть переопределено. Следующий пример выводит на экран окно сообщения с именем текущего пользователя:
MsgBox(0,»Currently logged on user», user())
Func user()
$user = @UserName
Return $user EndFunc
Библиотеки пользовательских функций Большое количество библиотек с пользовательскими функциями (UDF – User-
Defined Functions ) доступны на форуме Autolt. Список находящихся в обращении
пользовательских функций AutoIT можно получить по адресу:
http://www.autoitscript.com/forum/index.php?showtopic=45167. Далее приведено
описание некоторых UDF-библиотек:
Auto3Lib
Разработчиком является Paul Campbell (логин PaullA). Эта библиотека включает
более 1,200 функций, в том числе элементы управления анимацией,
параметрами даты и времени, основными настройками, IP-адресами, списками,
меню, календарем, строкой состояния, табуляцией, панелью инструментов
Window, всплывающими подсказками, деревом элементов и множество других.
SysTray_UDF
Разработчик залогинен как Tuape. Библиотека позволяет получать информацию
из элементов системного трэя и управлять им.
Microsoft Word Automation Library Разработчик — Bob Anthony (логин big_daddy). Библиотека позволяет производить
манипуляции с документами Microsoft Word.
ExcelCOM_UDF
Логин разработчика Locodarwin. Библиотека позволяет производить
манипуляции и создавать рабочие книги Microsoft Excel.
Я создал демонстрационную пользовательскую функцию, предназначенную для
нахождения на экране определенных изображений по чек-сумме их пикселей
указанных в . Пользовательская функция описана PixelChecksum() _findchecksum
ниже. Этот код необходимо сохранить как findchecksum_UDF.au3 и поместить его в
C:Program FilesAutoIt3Include (или в папку в директории с AutoIt3, Include
если она расположена на диске по иному адресу) или в папке, где вы позже
сохраните скрипт из примера 10 (после его создания и выполнения). Функция
_findchecksum() возвращает , если чек-сумма не обнаружена, иначе возвращает 0
координаты размещения изображения иx ( соответствует , y [0] x [1] соответствует
). y
Пользовательская функция _findpixelchecksum подходит для автоматизации задач
по открытию или перемещению файлов изображений. Популярное поле для
данного типа автоматизации — модификация видеоигр. Есть много онлайновых
ролевых игр, для которых программируются скрипты, с их помощью можно
приобрести необходимый опыт и «отшлифовать» свои навыки по автоматизации
повторяющихся процессов. ; ===================================================================================
; _findchecksum UDF v1 — June 24, 2007
; Автор Andy Flesner
; Произведено и протестировано Windows XP Service Pack 2
; http://autoit.flesner.com
#cs
Синтаксис имеет вид: _findchecksum($checksum, $width, $height, $pcolor, $x = 0, _
$y = 0, $d_width = @DesktopWidth, $d_height = @DesktopHeight), где:
$checksum – чек-сумма искомой области
$width – ширина области
$height – высота области
$pcolor – цвет верхнего левого пикселя искомой области
$x – начальная координата Х
$y – начальная координата У
$D_Width – общая ширина зоны поиска, по умолчанию это ширина разрешения экрана
$D_Height — общая высота зоны поиска, по умолчанию это высота разрешения экрана
Функция возвращает координаты x и y, соответствующие координатам верхнего
левого пикселя искомого изображения. Например:
$coordinates = _findchecksum($checksum, $width, $height, $pcolor)
Координата x будет выведена как $coordinates[0], а координата y будет
выведена как $coordinates[l].
Если координаты не будут найдены, функция вернет значение 0.
#ce
; ===================================================================================
Func _findchecksum($checksum, $width, $height, $pcolor, $x= 0, $y = 0, _
$d_width = @DesktopWidth, $d_height = @DesktopHeight)
$current_y = $d_height — 1
While 1
$xy = PixelSearch($x, $y, $d_width- 1, $current_y, $pcolor)
If @error AND $current_y = ($d_height — 1) Then
Return 0
ElseIf @error Then
$x = 0
$y = $current_y + 1
$current_y = ($d_height — 1)
ElseIf $checksum = PixelCheckSum($xy[0], $xy[1],$xy[0] + $width, _
$xy[l] + $height) Then
Return $xy
Else
$x = $xy[0] + 1
$y = $xy[1]
$current_y = $y
EndIf
WEnd
EndFunc
Пример 10 определяет зону поиска, вычисляет чек-суммы имеющихся областей, а
затем находит чек-сумму, введенную пользователем с клавиатуры.
Пример 10. Пользовательская функция findchecksum()
#include <findchecksum_UDF.au3>
Global $checksum, $coord, $pcolor
; Указанная в чек-сумме ширина
Global $width = 30
; Указанная в чек-сумме высота
Global $height = 30
HotKeySet(«{ENTER}»,»checksum_record»)
Global $instructions1 = «Поместите курсор мыши в левую верхнюю » & @LF & _
«часть области нажмите ENTER для ее записи.»
Global $instructions2 = «Нажмите F для поиска записанной зоны.»
While $checksum = “ “
$coord = MouseGetPos()
$pcolor = PixelGetColor($coord[0], $coord[1])
ToolTip($instructions1 & @LF & @LF & «x = » & $coord[0] & @LF & «y = » & $coord[1] _
& @LF & @LF & «Decimal Pixel Color = » & $pcolor,$coord[0] — 250, $coord[1] — 100)
Sleep(100)
Wend
HotKeySet(«f»,»Поиск чек-суммы»)
While 1
ToolTip($instructions2)
Sleep(100)
Рисунок 6. «Подсказки» к пользовательской функции findchecksum(),
описанной в примере 10
Wend
Func checksum_record()
$checksum = PixelChecksum($coord[0], $coord[1], $coord[0] + $width, _
$coord[1] + $height)
HotKeySet(«{ENTER}»)
EndFunc
Func checksum_find()
ToolTip(«»)
$found = _findchecksum($checksum, $width, $height,$pcolor)
If$found = 0 Then
MsgBox(4096,»Ошибка»,»Чек-сумма не найдена.»)
Exit
Else
MouseMove($found[0] + ($width / 2), $found[1] + ($height / 2), 1000)
ToolTip(«Обнаружено!»)
Sleep(5000)
ToolTip(«»)
MsgBox(0,»Чек-сумма найдена», «Координаты искомого объекта x=» &_
$found[0] + ($width / 2) & » y=» & $found[1] + ($height / 2) & «.»)
Exit
EndIf
EndFunc
Скомпилируйте и запустите код из примера 10. Поместите курсор мыши в область
на экране, которую впоследствии потребуется распознать, и нажмите ENTER. Затем
переместите курсор в другую область экрана. Нажав «горячую» клавишу F, мы
запускаем процесс поиска области экрана с определенной чек-суммой, и курсор
перемещается в центр объекта с искомой чек-суммой, которая ранее была сохранена
при нажатии клавиши ENTER. Пример действия программы проиллюстрирован на
рисунке 6.
Условные выражения и операторы цикла
Условные выражения и операторы цикла упрощают исходный код и делают
возможным решение сложных задач.
Вместо того, чтобы повторять тот же самый код много раз, Вы можете просто
выполнить оператор цикла, который самостоятельно повторяет код, пока не
соблюдено заданное условие. Пока выражение является истинным, оператор будет
выполняться в рамках цикла.
Условные операторы позволяют Вам выполнять задачи, основанные на истинности
обрабатываемого выражения. Если выражение является истинным, оператор
подлежит выполнению.
Условные операторы
Условный оператор выполняется в зависимости от того, соблюдены ли
определенные условия. В AutoIt имеется три типа условных операторов:
1. . Оператор If…Then…Else выполняется если заданное условие If
является истинным; в противном случае выполняется оператор . В Else
приведенном примере, в случае ввода значения , выводится сообщение, в 2
противном случае происходит прекращение выполнения скрипта:
Global $number = 2
If $number = 2 Then
MsgBox(0, «Message», «The value of $number is » & $number & «.»)
Else
Exit
EndIf
Операторы могут быть вложенными. Это означает, что оператор может If
содержать в своем теле многократные операторы , что и показано в If
следующем примере:
Global $number = 2
If @OSVersion = «WIN_XP» Then
If @Username = «Administrator» Then
If $number = «2» Then
MsgBox(0, «Message», «The value of $number is » & $number & «.»)
Else
Exit
EndIf
Else
MsgBox(4096, «Error», «You must be logged on as Administrator.»)
EndIf
Else
MsgBox(4096, «Error», «You must be running Windows XP.»)
EndIf
используется, чтобы добавить несколько выражений для проверки в теле ElseIf
оператора, хотя обычно, более эффективными для оценки многократных
выражений являются структуры или . Select…Case Switch…Case
Следующий пример выводит на экран оператор , который использует : If ElseIf
If @OSVersion = «WIN_VISTA» Then
MsgBox(0, «OS Version», «You are running Windows Vista.»)
ElseIf @OSVersion = «WIN_2003» Then
MsgBox(0, «OS Version», «You are running Windows 2003.»)
ElseIf @OSVersion = «WIN_XP» Then
MsgBox(0, «OS Version», «You are running Windows XP.»)
ElseIf @OSVersion = «WIN_2000» Then
MsgBox(0, «OS Version», «You are running Windows 2000.»)
Else
EndIf
В операторах могут также использоваться булевы значения ( ) и If AND, OR, NOT
логические операторы ( ). Вот пример, который <, <=>, >=, <>, =, ==
использует и булевы значения и логические операторы:
Global $num1 = InputBox(«Number 1»,»Number 1: «,»»)
Global $num2 = InputBox(«Number 2»,»Number 2: «,»»)
If @OSVersion = «WIN_XP» AND @OSServicePack = «Service Pack 2» Then
If $num1 + $num2 > 10 Then
MsgBox(0,»Greater than 10″,»The sum of Number 1 and Number 2 is » & _
«greater than 10.»)
ElseIf $num1 + $num2 < 10 Then
MsgBox(0,»Less than 10″,»The sum of Number 1 and Number 2 is less » & _
«than 10.»)
Else
MsgBox(0,»Must be 10″,»If not less than or greater than 10, the sum » & _
«of Number 1 and Number 2 must be equal to 10.»)
EndIf
Else
MsgBox(4096,»Error»,»You must be running Windows XP SP2.»)
EndIf
Если установленная на машине пользователя версия Windows не является XP
Service Pack 2, пользователь увидит всплывающее сообщение о необходимости
запустить Windows XP SP2. Если пользователь запустит XP SP2, скрипт исполнит
выражение . Если полученное значение будет больше , $num1 + $num2 10
пользователь увидит об этом сообщение, в противном случае он получит другие
прописанные в скрипте сообщения.
2. . В операторе выбора Select…Case , оценивается истинность или If
ложность выражения. Если выражение истинно, условие ассоциируется с выражением и оно выполняется. Оператор Select…Case является подобным, но вместо оценки одного выражения на предмет истинности или ложности он проверяет сразу несколько выражений. Оператор Select…Case показан далее:
Select
Case @OSVersion = «WIN_VISTA»
MsgBox(0, «OS Version», «You are running Windows Vista.»)
Case @OSVersion = «WIN_2003»
MsgBox(0, «OS Version», «You are running Windows 2003.»)
Case @OSVersion = «WIN_XP»
MsgBox(0, «OS Version», «You are running Windows XP.»)
Case @OSVersion = «WIN_2000»
MsgBox(0, «OS Version», «You are running Windows 2000.»)
EndSelect
В результате исполнения скрипта пользователь получает сообщение о том, какая
версия Windows запущена в данный момент: Vista, 2003, XP или 2000.
Как и оператор , оператор If Select…Case может быть вложенным и позволяет
пользователю обращаться с булевыми и логическими операторами. Вместо Else
(как в операторе ), здесь используется оператор , который If Case Else
выполняет ряд задач. Case Else выполняется, если ни одно из условий не
является истинным. В следующем примере продемонстрированы вложенные
операторы Select…Case использующие булевы и логические выражения:
Global $num1 = InputBox(«Number 1»,»Number 1: «,»»)
Global $num2 = InputBox(«Number 2»,»Number 2: «,»»)
Select
Case @OSVersion = «WIN_XP» AND @OSServicePack = «Service Pack 2»
Select
Case $num1 + $num2 > 10
MsgBox(0,»Greater than 10″,»The sum of Number 1 and Number 2 » & _
«is greater than 10.»)
Case $num1 + $num2 < 10
MsgBox(0,»Less than 10″,»The sum of Number 1 and Number 2 is » & _
«less than 10.»)
Case $num1 + $num2 = 10
MsgBox(0,»Equals 10″,»The sum of Number 1 and Number 2 is » & _
«equal to 10.»)
EndSelect
Case Else
MsgBox(4096,»Error»,»You must be running Windows XP SP2.»)
EndSelect
3. . Данный оператор аналогичен оператору ; Switch…Case Select…Case
отличие состоит в оценке выражения. В операторе Switch…Case оцениваются
данные, заявленные в теле оператора. С целью определения истинности условий
данные оцениваются точно так же, как в операторе . (Если ни Select…Case
одно из условий не является истинным, выполняется оператор .) Case Else
Преимуществом и особенностью Switch…Case является то, что здесь есть
параметр , с помощью которого можно задать диапазон значений, в пределах To
которых выражение является истинным. Операторы Switch…Case могут также
быть вложенными. Далее следует пример вложенного оператора , Switch…Case
использующего параметр : To
Global $num1 = InputBox(«Number 1»,»Number 1: «,»»)
Global $num2 = InputBox(«Number 2»,»Number 2: «,»»)
Switch @OSVersion
Case «WIN_XP»
Switch @OSServicePack
Case «Service Pack 2»
Switch $num1 + $num2
Case 0 To 9
MsgBox(0,»Less than 10″,»The sum of Number 1 and» &_
«Number 2 is less than 10.»)
Case 10
MsgBox(0,»Equals 10″,»The sum of Number 1 and Number » & _
«2 is equal to 10.»)
Case Else
MsgBox(0,»Greater than 10″,»The sum of Number 1 and » & _
«Number 2 is greater than 10.»)
EndSwitch
Case Else
MsgBox(4096,»Error»,»You must be running Windows XP Service » & _
«Pack 2.»)
EndSwitch
Case Else
MsgBox(4096,»Error»,»You must be running Windows XP.»)
EndSwitch
Операторы цикла Операторы цикла — это операторы, которые повторяют себя неоднократно. В AutoIt
v3 доступны четыре типа операторов цикла:
1. . Синтаксис оператора For…Next For…Next следующий:
For <variable> = <start> To <stop> [Step <stepval>]
Statements
…
Next
Счетчик цикла автоматически определяется как локальная переменная даже при
включенном параметре . В ходе цикла пошагово перебираются MustDeclareVars
значения начиная со значения <stаrt> (по умолчанию шаг цикла <stepval>
равняется 1). Цикл завершается, как только значение переменной превышает
значение . <stop>
Значения и <stop> <stepval> могут изменяться, но считываются они только
один раз, при старте цикла. Структура For…Next может быть вложенной в
другие операторы. Далее следует пример оператора , в котором For…Next
скрипт выводит на экран 10-секундный обратный отсчет, после чего открывается
окно сообщения, которое говорит: “Бум!” :
For $variable = 10 To 1 Step -1
SplashText0n(«Countdown», $variable, 65, 20)
Sleep(1000)
Next
Splash0ff()
MsgBox(0,»», «Boom!»)
2. For…In…Next Данный тип операторов цикла используется для работы с .
данными массивов или коллекций объектов. Оператор имеет следующий
синтаксис:
For <variable> In <expression>
Statements
Next
Если коллекция объектов не содержит элементов, то цикл пропускается, а
<variable> будет содержать пустую строку. Если коллекция не является
объектом или массивом, выполнение скрипта завершается сообщением об
ошибке. Структура For…In…Next может быть вложенной. Далее приведен
пример использования структуры For…In…Next для работы с данными
массива:
Global $array[4]
$array[0]=»w»
$array[1]=»x»
$array[2]=»y»
$array[3]=»z»
For $element IN $array
MsgBox(0,»Current $array item», $element)
Next
3. Данный оператор выполняет цикл до тех пор, пока значение Do…Until.
Until не станет истинным, и имеет следующий синтаксис:
Do
Statements
…
Until <expression>
В ходе выполнения цикла происходит проверка значений, пока не будет достигнуто самое последнее. Структура Do…Until может быть вложенной. Следующий пример использует Do…Until для вывода 10-секундного
обратного отсчета, после которого появляется сообщение:
$variable = 10
Do
SplashTextOn(«Countdown», $variable, 65, 20)
Sleep(1000)
$variable = $variable — 1
Until $variable = 0
SplashOff()
MsgBox(0,»»,»Boom!»)
4. Пока условие является истинным, выполняются указанные в While…WEnd.цикле команды. Отличие от структуры Do…Until состоит в том, что значение переменной проверяется до запуска цикла, при этом, если значение переменной не соответствует заданным условиям (является ложным) операторы в теле цикла выполняться не будут, и цикл не запустится. Структура While…WEnd имеет следующий синтаксис: While <expression>
Statements …
Wend
Приведенный далее цикл While…Wend будет выполняться, пока значение не
достигнет . Данный тип циклов можно использовать в скриптах для 1
программирования ожидания каких-либо действий или процессов (например,
нажатие «горячей» клавиши): $variable = 10
While $variable > 0
SplashTextOn(«Countdown»,$variable,65,20)
Sleep(1000)
$variable = $variable — 1
WEnd
SplashOff()
MsgBox(0,»»,»Boom!»)
Пока значение переменной $variable более , будет производиться обратный 0
отсчет в секундах от 10 до 1. По завершении цикла появится сообщение “Boom!”
With…EndWith
Данный тип операторов не производит оценку значений как условные операторы
или операторы цикла. В файле помощи Autolt структура With…EndWith отнесена
к категории операторов цикла, но реально она используется только для упрощения
программного кода ссылок на переменные объектного типа. Синтаксис структуры
выглядит так:
With <expression>
Statements
…
EndWith
Выражения должны быть объектного типа. Пример 11 и пример 12 код ссылки на
объект, который становится более простым при использовании : With…EndWith
Пример 11. Длинный метод без использования With…EndWith
#cs Настоящий скрипт составлен без использования структуры With…EndWith #ce
$object = ObjCreate(«InternetExplorer.Application.1»)
$object.Visible = 1
$object.Height = 768
$object.Width = 1024
$object.Navigate(«http://www.aismarthomes.com/»)
Пример 12. Простой метод с использованием With…EndWith
#cs Приведенный пример демонстрирует как структура With…EndWith упрощает код #ce
$object = ObjCreate(«InternetExplorer.Application.1»)
With $object
.Visible = 1
.Height = 768
.Width = 1024
.Navigate(«http://www.aismarthomes.com/»)
EndWith
Данные переменной $object содержащие , , .Visible .Height .Width и .Navigate
автоматически выполняются внутри структуры . На рисунке 7 With…EndWith
показан результат выполнения скомпилированного скрипта.
Рисунок 7. Пример 11 и пример 12 запускают окно Internet Explorer размером 1024х768
COM — объекты (Component Object Models)
СОМ — расширения обеспечивают общий интерфейс для работы с приложениями в
среде Microsoft. Программы имеют определенные COM-объекты, которые могут
использоваться в AutoIt (и в других языках программирования), для управления
приложениями и выполнения в их пределах определенных задач. Чтобы
использовать COM-объекты, необходимо знать имя объекта, его свойства и методы.
Чтобы найти данные объекты и сведения о их свойствах и методах, можно
использовать Microsoft OLE/COM Object Viewer, который является частью набора
ресурсов Windows. Загрузить Microsoft OLE/COM Object Viewer можно здесь:
http://download.microsoft.com/download/win2000platform/oleview/ 1.00.0.1/nt5/en-us/oleview_setup.exe
Если при запуске oleview.exe вы получите сообщение об ошибке в библиотеке
, загрузите файл: http://download.microsoft.com/download/2Zf/ iviewers.dll1/2f15a59b-6cd7-467b-8ff2-f162c3932235/ovi386.exe
Запустите скачанный файл ovi386.exe и распакуйте его содержимое в
. Скопируйте C:MSTOOLSBIN iviewers.dll из C:MSTOOLSBIN в директорию с
установленным . После этого зарегистрируйте библиотеку с oleview_setup.exe
помощью regsvr32 iviewers.dll в директории с oleview_setup.exe.
При просмотре объектов с OLE/COM Object Viewer учтите, что в AutoIT могут
использоваться только объекты управления с TypeLib и IDispatch.
Далее следует пример COM-объекта, который создает электронную таблицу Excel,
после чего закрывает программу Excel:
$oExcel = ObjCreate(«Excel.Application») ; создание объекта Excel
With $oExcel
.Visible = 1 ; открытие Excel
.WorkBooks.Add ; создание новой электронной таблицы
.Quit ; закрытие Excel
EndWith
Для получения более детальной информации о COM – объектах ознакомьтесь с
файлом помощи Autolt v3.
Примеры автоматизации
Редактирование системного реестра, копирование файлов, запуск от имени
пользователя, контроль над клавиатурой и мышью, работа с COM – объектами –
чего только нельзя сделать с помощью AutoIt.
Данный раздел полностью посвящен скриптам. Я создавал и использовал их с
правами сетевого администратора. Все скрипты были переработаны для данной
книги; скрипты создавались и тестировались на Microsoft Windows XP Service Pack 2.
Проверка версии программы McAfee AntiVirus Эта программа получает сведения о версии используемого McAfee AntiVirus, версии
ePO Agent, и дате создания файла определений. Скрипт был создан рядом
пользователей на основании доступных доменных ресурсов. В первую очередь
проверяется наличие установленного антивируса и/или ePO Agent, после чего
проверяется файл определений за последние пять рабочих дней (McAfee обычно не
выпускает релизы определений в выходные дни). В данном скрипте имеется ссылка
на файл . Он описывается далее в разделе User Lockout. Пример 13 Lock.exe
оперирует вложенными операторами , структурой If Select…Case и
пользовательскими функциями.
Пример 13. Проверка версии программы McAfee AntiVirus
#include <Date.au3> ; подключение констант даты и времени
; Объявление всех глобальных переменных
; =====================================================================================
Global
$dat71, $dat71monthday, $dat71year, $dat71format, $dat80i, $dat80imonthday, _
$dat80iyear, $dat80iformat, $dat85, $dat85monthday, $dat85monthday, _
$dat85year, $dat85format, $datdate, $sLongDayName, $currentdate, $datediff, _
$answer, $username, $epoversion, $eporeg, $updatepath, $weekday
; Проверка прав текущего пользователя
; =====================================================================================
$username = EnvGet(«USERNAME»)
; Получение из системного реестра сведений о версии ePO Agent
; =====================================================================================
$eporeg = RegRead(«HKEY_LOCAL_MACHINESOFTWARENetwork AssociatesePolicy » & _
«OrchestratorApplication PluginsEPOAGENT3000″,»Version»)
; Сокращение значения версии ePO Agent до трех левых знаков и проверка значения ключа
; =====================================================================================
$epoversion = StringLeft($eporeg,3)
If $epoversion = «3.6» Then ; не делать ничего
ElseIf $epoversion = «» Then ; ключ реестра отсутствует, Agent не установлен
RunWait(«Lock.exe»,»») ; блокировка соединения
MsgBox(0,»EPO Agent не установлен!»,»Вы не можете обновить Virus-Scan» & _
» Agent! Соединение заблокировано! Нажмите OK для выхода.»)
Exit
Else ; установлена устаревшая версия EPO Agent
RunWait(«Lock.exe»,»») ; блокировка соединения
MsgBox(0,»EPO Agent устарел!»,»Невозможно обновить текущий Virus-Scan » & _
«Agent! Соединение заблокировано! Нажмите OK для выхода.»)
Exit
EndIf
; Запуск функции DatDate() для определения даты создания файла определений
; =====================================================================================
DatDate()
Func DatDate()
; получение ключа реестра со сведениями о дате создания McAfee Scan Engine 7.1
$dat71 = RegRead(«HKEY_LOCAL_MACHINESOFTWARENetwork AssociatesePolicy » & _
«OrchestratorApplication PluginsVIRUSCAN7100″,»DatDate»)
; получение из ключа реестра сведений о дне и месяце
$dat71monthday = StringTrimRight($dat71, 5)
; получение из ключа реестра сведений о годе
$dat71year = StringTrimLeft($dat71, 6)
; приведение даты в формат YYYY/MM/DD для дальнейших вычислений
$dat71format = ($dat71year & «/» & $dat71monthday)
;получение ключа реестра со сведениями о дате создания McAfee Scan Engine 8.0i
$dat80i = RegRead(«HKEY_LOCAL_MACHINESOFTWARENetwork Associates ePolicy » & _
«OrchestratorApplication PluginsVIRUSCAN8000″,»DatDate»)
; получение из ключа реестра сведений о дне и месяце
$dat80imonthday = StringTrimRight($dat80i, 5)
; получение из ключа реестра сведений о годе
$dat80iyear = StringTrimLeft($dat80i, 6)
приведение даты в формат YYYY/MM/DD для дальнейших вычислений
$dat80iformat = ($dat80iyear & «/» & $dat80imonthday)
; получение ключа реестра со сведениями о дате создания McAfee Scan Engine 8.5.0i
$dat85 = RegRead(«HKEY_LOCAL_MACHINESOFTWARENetwork AssociatesePolicy » & _
«OrchestratorApplication PluginsVIRUSCAN8600″,»DatDate»)
; получение из ключа реестра сведений о дне и месяце
$dat85monthday = StringTrimRight($dat85, 5)
; получение из ключа реестра сведений о годе
$dat85year = StringTrimLeft($dat85, 6)
приведение даты в формат YYYY/MM/DD для дальнейших вычислений
$dat85format = ($dat85year & «/» & $dat85monthday)
; определение версии антивирусного сканера
; =====================================================================================
If $dat71 = «» And $dat80i = «» And $dat85 = «» Then
RunWait(«Lock.exe»,»») ; Блокировка соединения
MsgBox(0, «Не определен антивирус!», & _
«Установлен другой ативирус. Нажмите OK, чтобы закрыть сообщение.»)
ElseIf $dat71 = «» And $dat80i = «» Then ; установлена версия 8.5.0i
$datdate = $dat85format
ElseIf $dat71 = «» And $dat85 = «» Then ; установлена версия 8.0i
$datdate = $dat80iformat
ElseIf $dat80i = «» And $dat85 = «» Then ; установлена версия 7.1
$datdate = $dat71format
Else
EndIf
; определение директории с файлом mcupdate.exe
; =====================================================================================
If FileExists(«C:Program FilesNetwork AssociatesVirusScanmcupdate.exe»)Then
$updatepath = «C:Program FilesNetwork AssociatesVirusScanmcupdate.exe»
ElseIf FileExists(«C:Program FilesMcAfeeVirusScan Enterprisemcupdate.exe») Then
$updatepath = «C:Program FilesMcAfeeVirusScan Enterprisemcupdate.exe»
Else
EndIf
; конвертация даты и определение дня недели
; =====================================================================================
; конвертация даты в текущий день недели для выполнения структуры Select…Case
$sLongDayName = _DateDayOfWeek( @WDAY )
; извлечение системных переменных для приведения даты к формату YYYY/MM/DD
$currentdate = ( @YEAR & «/» & @MON & «/» & @MDAY )
; вычисление разницы между текущей датой и датой создания файла определений
$datediff = _DateDiff( ‘d’, $datdate, $currentdate) ;
EndFunc
Select
Case $sLongDayName = «Monday»
$weekday = 2
Case $sLongDayName = «Tuesday»
$weekday = 2
Case $sLongDayName = «Wednesday
$weekday = 2
Case $sLongDayName = «Thursday»
$weekday = 2
Case $sLongDayName = «Friday»
$weekday = 2
Case $sLongDayName = «Saturday»
$weekday = 0
Case $sLongDayName = «Sunday»
$weekday = 1
EndSelect
If $datediff >= (5 + $weekday) Then ; если определения старее 5 рабочих дней
If $username = «Administrator» Then ; сообщить об ошибке и закрыть скрипт
MsgBox(0,»Anti-Virus Out of Date»,»Your are currently logged onto a » & _
«machine with out of date Anti-Virus. Click OK to exit.»)
Exit
Else
EndIf
RunWait(«Lock.exe»,»») ; блокировка соединения
$answer = MsgBox(4,»AntiVirus устарел»,»Определения не актуальны » & _
«Аккаунт заблокирован, пока Anti-Virus не будет обновлен. Обновить сейчас?»)
If $answer = 6 Then ; согласие на обновление
RunWait($updatepath) ; запуск инструкции по обновлению DatDate()
; запуск проверки для определения обновлена ли база данных полностью
; ===============================================================================
; если данные определений старее пяти дней, сообщить об ошибке
If $datediff >= (5 + $weekday) Then
MsgBox(0,»Error»,»Обновление завершено. Нажми OK для выхода.»)
Exit
; если данным определений менее пяти дней вывести сообщение об успешном обновлении
ElseIf $datediff < (5 + $weekday) Then
MsgBox(0,»Обновление завершено»,»Антивирусная программа » & _
«полностью обновлена! Нажмите OK для выхода.»)
Exit
EndIf
ElseIf $answer = 7 Then ; no is clicked
MsgBox(0,»Ошибка»,»Антивирусная программа не обновлена. » & _
«Аккаут был заблокирован.»)
EndIf
Else
EndIf
Exit
Исправления для утилиты AutoPatcher
Скрипт примера 14 использует функции FileCopy, WinWait, WinActive, WinAc
и . Цель создания программы – исправление tivate, WinClose, Run RunWait
некоторых проблем в старой версии утилиты AutoPatcher, используемой для
обновления Windows.
Пример 14. Исправления для утилиты AutoPatcher
#NoTrayIcon ; скрыть иконку в трее
; выполнение программы
; =====================================================================================
Run(«C:Program FilesAutoPatcherToolsAutoPatcher Module Editor.exe»)
; ожидание открытия программы
; =====================================================================================
WinWait(«AutoPatcher Module Editor 2.0″,»»)
; проверка видимости активного окна, если окно не активно – активировать
; =====================================================================================
If Not WinActive(«AutoPatcher Module Editor 2.0″,»») Then _
WinActivate(«AutoPatcher Module Editor 2.0″,»»)
; ожидание активации окна
; =====================================================================================
WinWaitActive(«AutoPatcher Module Editor 2.0″,»»)
; закрытие окна программы
; =====================================================================================
WinClose(«AutoPatcher Module Editor 2.0″,»»)
; копирование необходимых файлов в C:WINDOWSsystem32 и перезапись имеющихся
; =====================================================================================
FileCopy(«C:Program FilesAutoPatcherbinCOMDLG32.OCX», _
«C:WINDOWSsystem32COMDLG32.OCX»,1)
FileCopy(«C:Program FilesAutoPatcherbinCOMCTL32.OCX», _
«C:WINDOWSsystem32COMCTL32.OCX»,1)
FileCopy(«C:Program FilesAutoPatcherbinFM20.DLL», _
«C:WINDOWSsystem32 FM20.DLL»,1)
FileCopy(«C:Program FilesAutoPatcherbinFM20ENU.DLL», _
«C:WINDOWSsystem32FM20ENU.DLL»,1)
FileCopy(«C:Program FilesAutoPatcherbinMSCOMCTL.OCX», _
«C:WINDOWSsystem32MSCOMCTL.OCX»,1)
FileCopy(«C:Program FilesAutoPatcherbinSSubTmr6.dll», _
«C:WINDOWSsystem32SSubTmr6.dll»,1)
FileCopy(«C:Program FilesAutoPatcherbinpoweroff.exe», _
«C:WINDOWSsystem32poweroff.exe»,1)
; «тихая» регистрация всех *.ocx и *.dll файлов с помощью regsvr32.exe
; =====================================================================================
RunWait(‘regsvr32 «c:WINDOWSsystem32COMDLG32.OCX» /s’)
RunWait(‘regsvr32 «c:WINDOWSsystem32COMCTL32.OCX» /s’)
RunWait(‘regsvr32 «c:WINDOWSsystem32FM20.DLL» /s’)
RunWait(‘regsvr32 «c:WIND0WSsystem32FM20ENU.DLL» /s’)
RunWait(‘regsvr32 «c:WINDOWSsystem32MSCOMCTL.OCX» /s’)
RunWait(‘regsvr32 «c:WINDOWSsystem32SSubTmr6.dll» /s’)
; Запуск программы AutoPatcher в автоматическом режиме с установками defaults.ini
; =====================================================================================
Run(‘C:Program FilesAutoPatcherAutoPatcher.exe /unattend:t2 /noeula » & _
«/noreboot /skipdetection /defaults:C:Program FilesAutoPatcherdefaults.ini’)
Exit ; выход из скрипта
Изменение месторасположения папки «Мои документы»
Программа в примере 15 изменяет месторасположение пользовательской папки
«Мои документы». Скрипт использует события нажатия клавиш клавиатуры и
оператор выбора . If
Пример 15. Изменение расположения папки «Мои документы»
#NoTrayIcon; Hides tray icon
; Объявление глобальных переменных
; ====================================================================================
Global $username, $newpath
$username = @UserName ; Определение имени текущего пользователя
; настройки расположения папки «Мои документы» в переменной $homepath
; ====================================================================================
$newpath = InputBox(«Новое расположение»,»Введите новый путь к папке » & _
«Мои документы (пользовательская директория будет создана здесь): «,»»)
; Проверка наличия директории из $newpath и её создание, если она отсутствует
; ====================================================================================
If FileExists($newpath) Then
Else
DirCreate($newpath)
EndIf
; Настройка свойств кнопок управления
; ====================================================================================
Send(«{LWINDOWN}d{LWINUP}»)
Sleep(500)
Send(«my{SPACE}d»)
Sleep(500)
Send(«{LSHIFT}+{F10}»)
Sleep(500)
Send(«{UP}{ENTER}»)
Sleep(500)
; настройка пути $newpath$username
; ====================================================================================
Send($newpath & «» & $username)
Send(«{ENTER}»)
; 5-секундный таймаут для принятия решения о перемещении документов
; ====================================================================================
WinWait(«Перемещение документов»,»Переместить всё»,5)
If WinExists(«Перемещение документов»,»Переместить всё «) Then
If Not WinActive(«Перемещение документов»,»Переместить всё») Then
WinActivate(«Перемещение документов»,»Переместить всё»)
WinWaitActive(«Перемещение документов»,»Переместить всё»)
Send(«n»)
Else
EndIf
; 5-секундный таймаут для принятия решения о создании директории
; ====================================================================================
WinWait(«Создание директории»,»Директория»,5)
If WinExists(«Создание директории»,»Директория») Then
If Not WinActive(«Создание директории»,»Директория») Then
WinActivate(«Создание директории»,»Директория»)
WinWaitActive(«Создание директории»,»Директория»)
Send(«n»)
Else
EndIf
Exit
Рисунок 8. Диалоговое окно из примера 15
Отключение DEP в Windows XP
В Windows XP существует технология предотвращения исполнения данных – DEP
(Data Execution Prevention), запрещающая изменения ряда файлов. Как отключить
DEP показано в скрипте из примера 16, который запускает себя от имени
локального администратора и перезаписывает конфигурационный файл . boot.ini
Пример 16. Отключение DEP (Data Execution Prevention)
#NoTrayIcon
; Объявление глобальных переменных
; ====================================================================================
Global $admin, $password
$admin = «Administrator»
$password = «password»
; настраивает запуск скрипта с правами локального администратора
; ====================================================================================
If Not $CMDLINE[0] Then
RunAsSet($admin, @Computername, $password)
If @Compiled Then
RunWait(‘»‘ & @ScriptFullPath & ‘» /admin’)
Else
RunWait(‘»‘ & @AutoItExe & ‘» «‘ & @ScriptFullPath & ‘» /admin’)
EndIf
; перемещение, удаление, перезапись и изменение атрибутов файла boot.ini
; ====================================================================================
RunAsSet()
ElseIf $CMDLINE[0] And $CMDLINE[1] = ‘/admin’ Then
FileSetAttrib(«C:boot.ini»,»-R») ; удаление атрибута «Только для чтения»
FileDelete(«C:boot.ini») ; удаление оригинального файла boot.ini
; запись первой строки в новый файл boot.ini
IniWrite(«C:boot.ini»,»boot loader»,»timeout»,»30″)
; запись второй строки в новый файл boot.ini
IniWrite(«C:boot.ini»,»boot loader»,»default», _
«multi(0)disk(0)rdisk(0)partition(l)WINDOWS»)
; запись последней строки boot.ini и команды /NoExecute=OptIn (отключает DEP)
IniWrite(«C:boot.ini»,»operating systems»,»multi(0)disk(0)rdisk(0)» & _
«partition(l)WINDOWS»,'»Microsoft Windows XP Professional» /fastdetect » & _
«/NoExecute=OptIn’)
; применение к новому файлу boot.ini атрибутов «Только для чтения» и «Скрытый»
FileSetAttrib(«C:boot.ini»,»+RH»)
EndIf
Отключение панели предварительного просмотра в Outlook XP Короткий и простой скрипт в примере 17 записывает ключ в системный реестр,
который отключает панель предварительного просмотра в Outlook XP.
Пример 17. Отключение панели предварительного просмотра в Outlook XP
#NoTrayIcon
; запись в реестр ключа, отключающего панель предварительного просмотра Outlook XP
; ====================================================================================
RegWrite(«HKEY_CLASSES_ROOTCLSID{00020D75-0000-0000-C000-000000000046}» & _
«ShellOpenCommand»,»»,»REG_SZ»,'»C:PROGRA~lMICROS~2Officel0OUTLOOK.EXE»‘ & _
‘/nopreview’)
Включение удаленного рабочего стола и NetMeeting
Здесь приведен ещѐ один пример скрипта, запускающегося с правами локального
администратора. Пример 18 устанавливает соединение с удаленным рабочим
столом и включает NetMeeting на отдельно взятой локальной машине.
Пример 18. Включение удаленного рабочего стола и NetMeeting
#NoTrayIcon ; Hides tray icon
; Объявление глобальных переменных
; ===================================================================================
Global $admin, $password
$admin = «Administrator»
$password = «password»
; настраиваем запуск скрипта с правами локального администратора;
===================================================================================
If Not $CMDLINE[0] Then
RunAsSet($admin, @Computername, $password)
If @Compiled Then
RunWait(«» & @ScriptFullPath & ‘» /admin’)
Else
RunWait(«» & @AutoItExe & ‘» «‘ & @ScriptFullPath & ‘» /admin’)
EndIf
RunAsSet()
ElseIf $CMDLINE[0] And $CMDLINE[1] = ‘/admin’ Then
; запись значений включения RDP (Remote Desktop Protocol) для удалённой машины
RegWrite(«HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal » & _
«Server»,»fDenyTSConnections»,»REG_DWORD»,0)
; запись значений для включения Netmeeting
RegWrite(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftConferencingMcpt», _
«Fpx»,»REG_BINARY»,»0l000000″)
EndIf
Средство обновления Microsoft Windows XP
Программа в Примере 19 проверяет наличие критических обновлений для Windows
XP SP2 от августа 2006. Программа работает только на Windows XP SP2; при
обнаружении любой другой операционной системы программа прекращается. При
наличии Internet Explorer 6 от мая 2007 устанавливаются обновления и для него.
Этот пример не включает все критические обновления безопасности, вышедшие
после августа 2006. Сценарий ссылается на , описание которого будет Lock.exe
приведено далее.
Пример 19. Средство обновления Microsoft Windows XP
#NoTrayIcon
; Ограничение версии и языка системы как English — United States Windows XP SP2
; =====================================================================================
If Not (@OSLang = «0409») Then
Exit
EndIf
If @OSVersion <> «Win_XP» Then
Exit
EndIf
; Запрет на выполнение скрипта
; =====================================================================================
If @ComputerName = «Computer» Then
Exit
EndIf
; Глобальные переменные для Internet Explorer
; =====================================================================================
Global $ieversion = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoft» & _
«Internet Explorer»,»Version»)
; Глобальные переменные для пакетов обновлений Windows XP
; =====================================================================================
; August 2006 Updates
Global $XPKB921883,$XPKB920214,$XPKB920670,$XPKB920683,$XPKB921398, _
$XPKB922616,$XPKB918899
; September 2006 Updates
Global $XPKB919007,$XPKB920685,$XPKB925486
; October 2006 Updates
Global $XPKB922819,$XPKB923191,$XPKB923414,$XPKB924191,$XPKB924496
; November 2006 Updates
Global $XPKB920213, $XPKB924270
; January 2007 Updates
Global $XPKB926255
; February 2007 Updates
Global $XPKB928843,$XPKB926436,$XPKB924667,$XPKB918118
; April 2007 Updates
Global $XPKB925902, $XPKB930178, $XPKB931261, $XPKB931784, $XPKB932168
; May 2007 Updates
Global $XPKB931768
; Проверка версии Windows
; =====================================================================================
If @OSServicePack = «Service Pack 2» Then WinXPUpdate()
Else
MsgBox(48,»Ошибка»,»Запущенная система не является Windows XP Service Pack 2.»)
RunWait(«lock.exe»,»»)
Exit
EndIf
; Проверка установленных обновлений для Windows XP Service Pack 2
; =====================================================================================
Func WinXPUpdate()
; August 2006 Updates
$XPKB920214 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB9202l4″,»Description»)
$XPKB920670 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB920670″,»Description»)
$XPKB920683 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB920683″,»Description»)
$XPKB921398 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB92l398″,»Description»)
$XPKB922616 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB9226l6″,»Description»)
If $XPKB920214 = «» Or $XPKB920670 = «» Or $XPKB920683 = «» Or $XPKB921398 = «» _
Or $XPKB922616 = «» Then
Lock()
EndIf
; September 2006 Updates
$XPKB919007 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB9l9007″,»Description»)
$XPKB920685 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB920685″,»Description»)
$XPKB925486 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB925486″,»Description»)
If $XPKB919007 = «» Or $XPKB920685 = «» Then
Lock()
EndIf
; October 2006 Updates
XPKB922819 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB9228l9″,»Description»)
$XPKB923191 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB923l9l»,»Description»)
$XPKB923414 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB9234l4″,»Description»)
$XPKB924191 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB924l9l»,»Description»)
$XPKB924496 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB924496″,»Description»)
If $XPKB922819 = «» Or $XPKB923191 = «» Or $XPKB923414 = «» Or $XPKB924191 = «» _
Or $XPKB924496 = «» Then
Lock()
EndIf
; November 2006 Updates
$XPKB920213 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB9202l3″,»Description»)
$XPKB924270 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB924270″,»Description»)
If $XPKB920213 = «» Or $XPKB924270 = «» Then
Lock()
EndIf
; January 2007 Updates
$XPKB926255 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB926255″,»Description»)
If $XPKB926255 = «» Then
Lock()
EndIf
; February 2007 Updates
$XPKB928843 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB928843″,»Description»)
$XPKB926436 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB926436″,»Description»)
$XPKB924667 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB924667″,»Description»)
$X
PKB918118 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB9l8ll8″,»Description»)
If $XPKB928843 = «» Or $XPKB926436 = «» Or $XPKB924667 = «» Or $XPKB918118 = «» _
Then
Lock()
EndIf
; April 2007 Updates
$XPKB925902 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB925902″,»Description»)
$XPKB930178 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB930l78″,»Description»)
$XPKB931261 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB93l26l»,»Description»)
$XPKB931784 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB93l784″,»Description»)
$XPKB932168 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB932l68″,»Description»)
If $XPKB925902 = «» Or $XPKB930178 = «» Or $XPKB931261 = «» Or $XPKB931784 = «» _
Or $XPKB932168 = «» Then
Lock()
EndIf
; May 2007 Updates
$XPKB931768 = RegRead(«HKEY_LOCAL_MACHINESOFTWAREMicrosoftUpdates Windows » & _
«XPSP3KB93l768″,»Description»)
If $XPKB931768 = «» Then
If StringLeft($ieversion,1) = «6» Then
Lock()
Else
EndIf
EndIf
EndFunc
;==================================================================================
; Функция, извещающая пользователя о необходимости обновления системы
;==================================================================================
Func Lock()
RunWait(«lock.exe»,»»)
Sleep(2000)
MsgBox(48,»Внимание!»,»В системе отсутствует критический пакет обновлений » & _
«системы безопасности. Установите его.»)
Exit
EndFunc
Детектор прокси-серверов для Internet Explorer
Программа в примере 20 отправляет пакеты прокси-серверам и настраивает Internet
Explorer на использование прокси-сервера, с которым установлено соединение.
Программа создает списки прокси-серверов с разделами ―proxy‖ для их IP-адресов и
―portnumber‖ – с номерами портов.
Пример 20. Детектор прокси-серверов для Internet Explorer
#NoTrayIcon
; отправка пакетов 1-му прокси-серверу и помещение его в набор при наличии соединения
; =====================================================================================
If Ping(«proxy1») Then
RegWrite(«HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion» & _
«Internet Settings»,»ProxyEnable»,»REG_DWORD»,1)
RegWrite(«HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion» & _
«Internet Settings»,»ProxyServer»,»REG_SZ»,»proxy1:portnumber»)
RegWrite(«HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion» & _
«Internet Settings»,»ProxyOverride»,»REG_SZ»,»<local>»)
; отправка пакетов 2-му прокси-серверу помещение его в набор при наличии соединения
; =====================================================================================
ElseIf Ping(«proxy2») Then
RegWrite(«HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion» & _
«Internet Settings»,»ProxyEnable»,»REG_DWORD»,1)
RegWrite(«HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion» & _
«Internet Settings»,»ProxyServer»,»REG_SZ»,»proxy2:portnumber»)
RegWrite(«HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion» & _
«Internet Settings»,»ProxyOverride»,»REG_SZ»,»<local>»)
; отправка пакетов 3-му прокси-серверу и помещение его в набор при наличии соединения
; =====================================================================================
Ping(«proxy3») Then ElseIf
RegWrite(«HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion» & _
«Internet Settings»,»ProxyEnable»,»REG_DWORD»,1)
RegWrite(«HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion» & _
«Internet Settings»,»ProxyServer»,»REG_SZ»,»proxy3:portnumber»)
RegWrite(«HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion» & _
«Internet Settings»,»ProxyOverride»,»REG_SZ»,»<local>»)
; отправка пакетов 4-му прокси-серверу и помещение его в набор при наличии соединения
; =====================================================================================
Ping(«proxy4») Then ElseIf
RegWrite(«HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion» & _
«Internet Settings»,»ProxyEnable»,»REG_DWORD»,1)
RegWrite(«HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion» & _
«Internet Settings»,»ProxyServer»,»REG_SZ»,»proxy4:portnumber»)
RegWrite(«HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion» & _
«Internet Settings»,»ProxyOverride»,»REG_SZ»,»<local>»)
; исключение прокси-сервера из набора, если соединение с ним недоступно
; =====================================================================================
RegWrite(«HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion» & _
«Internet Settings»,»ProxyEnable»,»REG_DWORD»,0)
EndIf
Run(«C:Program FilesInternet ExplorerIEXPLORE.EXE») ; запуск Internet Explorer
Блокировка пользователя
В примере 21 на локальной машине специально используются неверные настройки
сети с административными привилегиями, периодически блокирующими учетные
записи пользователей. Возможно использование как локальных, так и доменных
аккаунтов, но перед этим необходимо настроить права доступа в настройках
групповой политики или локальной политики безопасности. Пример 21. Блокировка пользователя
#NoTrayIcon
If @UserName = «Administrator» Then
Exit
ElseIf @UserName = «user» Then
Exit
Else
LockAcct() ; запуск блокировки функций, если отсутствуют привилегии
EndIf
Func LockAcctO $i = 0
While $i < 4 ; цикл проверки прав текущего пользователя
RunWait(@ComSpec & » /c » & «net use * \127.0.0.1C$ BadPassword » & _
«/USER:DOMAIN%USERNAME%»,»»,@SW_HIDE)
$i = $i + 1
WEnd
EndFunc
Получение SID пользователя
Созданная с целью получения SID в Windows, эта утилита обнаруживает
идентификатор безопасности пользователя – SID (Security Identifier) на локальных
машинах или доменах. Пример 22 использует COM-объекты, такие как
A3LSecurity.au3, входящих в состав библиотеки пользовательских функций
Auto3Lib, упоминавшейся в предыдущих разделах книги.
Пример 22. Получение SID пользователя
#NoTrayIcon
#include <A3LSecurity.au3>
Opt(«MustDeclareVars», 1)
Global $sUser, $aName
$sUser = InputBox(«SID Lookup», «Enter UserName:», «», «», 200, 130)
If @Error <> 0 Then
Exit
$aName = _Security_LookupAccountName($sUser)
If @Error = 0 Then
MsgBox(0,»SID Lookup»,»SID : » & $aName[0] & @CR & _
«Domain ..: » & $aName[1] & @CR & _
«SID Type : » & _Security_SidTypeStr($aName[2]))
Else
MsgBox(0,»SID Lookup»,»Invalid user name»)
EndIf
Рисунок 9. Результат выполнения примера 22
Изменение заголовка документа Word
Данная программа была написана с помощью Microsoft Word Automation
Library упомянутой ранее в разделе пользовательских функций. Скрипт из
примера 23 освобождает директорию, предназначенную для хранения файлов , *.doc
затем изменяет имена выбранных файлов на имена, соответствующие дате их
последних изменений.
Пример 23. Изменение заголовка документа Word
#NoTrayIcon;
; Подключение констант File, Word и GUI
; =====================================================================================
#include <file.au3>
#include <Word.au3>
#include <GuiConstants.au3>
; изменение опций режима OnEvent
; =====================================================================================
Opt(‘GUIOnEventMode’, 1)
; Объявление глобальных переменных
; =====================================================================================
Global $LogPath, $DocPath, $progress, $progresspercent
; GUI – графический интерфейс пользователя
; =====================================================================================
GUICreate(«Изменение название документов Word», 320, 250)
GUISetIcon(«icon.ico»)
GUISetOnEvent($GUI_EVENT_CLOSE, ‘Event_GUIClose’)
; PIC – изображения
; =====================================================================================
GUICtrlCreatePic(«logo.gif», 128.5, 5, 63, 56)
; Расположение лог-файла и измененных файлов
; =====================================================================================
GUICtrlCreateLabel(«Укажите конечную директорию», 10, 70, 300, 15, _ $SS_CENTER)
GUICtrlCreateLabel(«сохранить лог-файл как:», 10, 85, 300, 15, $SS_CENTER)
$LogPath = GUICtrlCreateInput(«», 10, 105, 300, 20)
GUICtrlCreateLabel(«Укажите путь к директории», 10, 130, 300, 15, _ $SS_CENTER)
GUICtrlCreateLabel(«изменить выбранные файлы на:», 10, 145, 300, 15, $SS_CENTER )
$DocPath = GUICtrlCreateInput(«», 10, 165, 300, 20)
; Кнопки
; =====================================================================================
GUICtrlCreateButton(«Go», 45, 200, 230, 30)
GUICtrlSetOnEvent(-1, ‘TitleChange’)
GUISetState(@SW_SHOW) ; показать интерфейс пользователя
While 1
Sleep(250)
Wend
Func TitleChange()
; скрытие GUI во время выполнения функции
; =================================================================================
GUISetState(@SW_HIDE)
_WordErrorHandlerRegister()
; открытие Microsoft Word
; =================================================================================
$oWordApp = _WordCreate(«», 0, 0, 0)
; создание переменной $sDocPath с данными о месте сохранения измененных файлов
; =================================================================================
$sDocPath = GUICtrlRead($DocPath)
; вывод обратного слэша, если пути не существует
; =================================================================================
If StringRight($sDocPath, 1) <> «» Then
$sDocPath &= «»
EndIf
$logpathfirst = GUICtrlRead($LogPath)
If StringRight($logpathfirst, 1) <> «» Then
$logpathfirst &= «»
EndIf
; создание переменной $sLogPath со сведениями о месте хранения log – файла
; =================================================================================
$sLogPath = $logpathfirst & «wordtitle.log»
; синхронизация имен всех файлов в измененной директории
; =================================================================================
$search = FileFindFirstFile($sDocPath & «*.doc»)
$filelist = _FileListToArray($sDocPath,»*.doc»,1)
; вычисление процентного соотношения файлов, подлежащих изменению
; =================================================================================
$filepercent = 100 / $filelist[0]
; настройка умолчаний для поиска файлов *.doc
; =================================================================================
If $search = -1 Then
MsgBox(0, «Ошибка», «Не обнаружено файлов/директорий в указанном месте»)
Exit
EndIf
; открытие лог-файла для чтения
; =================================================================================
FileOpen($sLogPath, 1)
; настройки панели состояния
; =================================================================================
ProgressOn(«Прогресс изменения документов»,»Изменено названий » & _
«документов…»,»»,300,200,16)
While 1 ; цикл продолжается пока не останется ни одного файла *.doc
$file = FileFindNextFile($search)
If @error Then ; если последний из файлов не *.doc – выйти из цикла
ProgressOff() ; отключение строки состояния
ExitLoop ; выход из цикла
Else
EndIf
; синхронизация с датой последних изменений, указанной в свойствах файла
$filetime = FileGetTime($sDocPath & $file,0,1)
; открытие последнего найденного файла *.doc
$oDoc = _WordDocOpen($oWordApp, $sDocPath & $file)
; получение оригинального названия файла из Microsoft Word
$sTitle = _WordDocPropertyGet($oDoc, «Title»)
; запись старых названий в log – файл
FileWriteLine($sLogPath, «===========================»)
FileWriteLine($sLogPath, $sDocPath & $file)
FileWriteLine($sLogPath, «===========================»)
FileWriteLine($sLogPath, «Старое название: » & $sTitle)
; Создание переменной $sFileName основанной на именах перемещенных файлов *.doc
; =============================================================================
$sFileName = StringTrimRight($file, StringLen($file) — StringInStr($file, _
«.», Default, -1) + 1)
_WordDocPropertySet($oDoc, «Title», $sFileName) ; передача имени в $sFileName
$sTitleNew = _WordDocPropertyGet($oDoc, «Title») ; получение имени для log
; Запись новых имен в log – файл в зависимости от даты их изменения
; =============================================================================
FileWriteLine($sLogPath, «Новое имя: » & $sTitleNew)
FileWriteLine($sLogPath, «Дата изменений: » & $filetime)
FileWriteLine($sLogPath, «»)
FileWriteLine($sLogPath, «»)
_WordDocClose($oDoc, -1) ; закрытие документа Word после сохранения имени
; помещение модифицированной даты в оригинальные время/дату
FileSetTime($sDocPath & $file,$filetime,0)
; вывод процента готовности на прогресс-бар
$progress = $progress + $filepercent
; настройки вывода процентов готовности
$progresspercent = StringLeft($progress,2)
; настройки прогресс-бара
ProgressSet($progress,$progresspercent & » % завершено…»)
WEnd
FileClose($sLogPath) ; закрытие log – файла
FileClose($search) ; закрытие поиска
_WordQuit($oWordApp) ; закрытие MS Word
MsgBox(0,»Завершено»,»Все документы в » & $sDocPath & » имеют » & _
«надлежащее измененное имя. Дата изменения файлов не изменена.»)
Exit
EndFunc
Func Event_GUIClose(); закрытие пользовательской формы кнопкой «Х»
Exit
EndFunc
Рисунок 10. Результат выполнения примера 23
Заключение
По прочтении данной инструкции к AutoIt v3 вы получили представление о
переменных и вложениях, графическом интерфейсе пользователя, пользовательских
функциях, об условных переходах и циклах. Разделы и примеры из книги могут
стать фундаментом для построения любых программ, доступных для языка AutoIt.
Последний раздел книги содержит примеры автоматизации, которые возможно
применять и на практике. Многие примеры могут быть использованы системными
администраторами или модифицированы для других целей. Данная книга может
стать источником для развития Ваших навыков программирования на AutoIt.
В будущем Вы можете быть уверены в своих возможностях по преодолению любых
вопросов по автоматизации.