AutoIt v3 — это бесплатный язык сценариев, подобный BASIC, разработанный для автоматизации графического интерфейса Windows и общих сценариев. Он использует комбинацию смоделированных нажатий клавиш, движения мыши и манипуляций с окном / элементами управления, чтобы автоматизировать задачи способом, невозможным или надежным с другими языками (например, VBScript и SendKeys). AutoIt также очень маленький, самодостаточный и будет работать на всех версиях Windows «из коробки» без раздражающих «сред выполнения»!
Пожалуй лучшего описания не стоит искать или придумывать.
Эта статья будет дополняться по мере моего познания этого языка.
У меня возникла идея управлять Windows программой с помощью веб-сайта. Чтение информации в интернете приводило к ступору, а точнее моя неправильная формулировка запроса поиска. Но вот спустя пару дней я нашел этот язык и решил попробовать автоматизировать процесс.
Часть 1
- Для начала скачаем AutoIt с оф.сайта https://www.autoitscript.com/site/autoit/downloads
- Установка простая, просто жмем Next
- Русскоязычное сообщество где можно почерпнуть информацию или спросить совет https://autoit-script.ru
Теперь обрисую полную задачу и нужные компоненты:
Веб-форма (php) отправляет запрос на сервер (Windows или Linux), сервер обрабатывает полученную информацию и записывает ее в текстовый файл и запускает AutoIt. AutoIt в свою очередь забирает информацию с файла и проводит нужные операции что заданы в скрипте, после чего результат отправляется обратно на сайт.
Для начала возьмем exe файл и посмотрим возможные операции с ним. Для примера я взял популярный генератор паролей для видеорегистраторов.

Есть 2 активных поля (DATE
и PASSWORD
) и 2 кнопки (OK
и Cancel
). В поле DATE
вводим дату в формате Год Месяц День, затем жмем ОК, и получаем свой PASSWORD
.
Таким образом алгоритм работы становится понятным для нас, но нужно перевести все это в скриптовый вариант.
- Создаем новый скрипт
- Запускаем утилиту AutoIt Window Info для получения информации об активных окнах в системе

Теперь следует получить информацию о программе ( в данном варианте это Super Password
).
Чтобы узнать название программы выбираем кнопку Finder Tool
что отмечена и зажимая левую кнопку мышки переводим курсор в поле окна программы. В итоге показывается название программы.
Run("SuperPassword.exe")
Запускает программу в обычном режиме. КомандаRun
имеет дополнительные флаги для запуска, вот их описание https://autoit-script.ru/docs/functions/run.htmWinWaitActive("Super Password")
Указываем что нужно ожидать активное окно с названиемSuper Password
ControlClick("Super Password", "", "[ID:1002]")
Теперь следует активировать окноDATE
. Во вкладке Control находим ID окна (1002)ClipPut(FileReadLine("input.txt"))
Поскольку в поле нужно ввести данные, предварительно создадим текстовый файлinput.txt
со следующим содержимым:20201016
. Помните еще о Год Месяц День ?send(ClipGet())
Теперь вставим данные20201016
с текстового документа в полеDATE
. Отлично, мы получаем данные с файлаinput.txt
, затем вставляем их в формуDATE
, и на выходе имеем сгенерированный ключ в поле PASSWORDSend("{ENTER}")
Чтобы отправить команду генерации пароля можно нажать кнопкуOK
или просто нажатьEnter
- Создадим файл в который будет производится запись результата с поля
PASSWORD
. $key = ControlGetText('Super Password', '', '[CLASS:Edit; INSTANCE:2]')
Забираем нужные данные с поляPASSWORD
. Создаем переменную$key
которая будет содержать данные нужной формы.

Снова получаем свойство окна, но теперь в другом формате. Вы можете использовать разные методы получения данных с окна в зависимости от программы и окон что она формирует.
FileWrite("output.txt", $key)
Запишем данные в файлoutput.txt
WinClose("Super Password", "")
Закроем окно программы после успешного выполнения кода.
Как выглядит полный скриптRun("SuperPassword.exe")
WinWaitActive("Super Password")
ControlClick("Super Password", "", "[ID:1002]")
ClipPut(FileReadLine("input.txt"))
send(ClipGet())
Send("{ENTER}")
$key = ControlGetText('Super Password', '', '[CLASS:Edit; INSTANCE:2]')
FileWrite("output.txt", $key)
WinClose("Super Password", "")
Или его можно Скачать
Теперь превратим скрипт в exe файл который можно запускать в среде Windows.

Для этого запускаем утилиту с названием Compile Script to
и указываем файл скрипта что мы сделали выше , и нажимаем Convert
Часть 2
Для управления со стороны Windows будем использовать Open Server https://ospanel.io. Это позволит запускать скрипты AutoIt и одновременно настроить Apache и Php для работы web-сервера.
Примечание: web-сервер может быть настроен и на Linux, это не имеет значения.
После скачивания и установки программы приступим к ее настройке.
- В папке
openserver→ OSPanel→ domains
создадим адрес нашего сайта. Для примера это будетtest.saniaowner.space
. Теперь создадим вложенную папкуtest
и добавим в нее файлы которые создали в первой части. Это должно выглядеть вот так

- Настроим домен в автоматическом режиме. Чтобы создать домен или поддомен откройте [Меню → Папка с сайтами] и создайте папку с именем будущего домена. После создания домена перезапустите сервер.

- Теперь создадим HTML форму в которой будем вводить данные для генерации пароля
<form action="forma_.php" method="post">
<br>Введите текущий Год Месяц День:
<input type="tel" size="10" pattern="[0-9]{8}" placeholder="<?php echo date("Ymd");?>" name="pass" /required></br>
<p><b><input type="submit" value="Сгенерировать пароль"></b>
</form>
Небольшое объяснение этой формы. forma_.php
— вызываем страницу которая содержит основной код.type="tel
— особенность HTML чтобы вводить только цифры.size="10"
— размер 10.pattern="[0-9]{8}"
— ограничение чтобы вводить только цифры от 0 до 9, общим количеством 8. То есть не больше 8, не меньше 8, ровно 8. Поскольку полная дата состоит из 8 цифр ( 2020 10 18).placeholder="<?php echo date("Ymd");?>"
— отображает текущую дату (Год Месяц День) в поле ввода.name="pass"
— имя формы./required
— данные заполнить обязательно, иначе не получится отправить форму
<b>Сгенерированный пароль:
<?php
$way = 'C:\openserver\OSPanel\domains\test.saniaowner.space\test'; //путь к папке test на диске
$clear = fopen($way.'\input.txt', 'w'); //очистить файл input.txt
fclose($clear);
$clear = fopen($way.'\output.txt', 'w'); //очистить файл output.txt
fclose($clear);
$value = $_POST['value']; // Здесь будет значение инпута с name атрибутом "value"
$pass = $_POST['pass']; // А здесь с name "pass"
$f = fopen($way.'\input.txt', 'a+'); // Открываем файл input.txt чтобы записать входящие данные с формы
fwrite($f, $pass."\n"); // Записываем данные
fclose($f); // Закрываем файл
$cmd = '%CD%\Test.exe'; // запускаем Test.exe (готовый скрипт)
while (@ ob_end_flush()); // если есть, прекращает все буферы вывода
$proc = popen($cmd, 'r');
echo '<pre>';
while (!feof($proc))
{
echo fread($proc, 4096);
@ flush();
}
echo '</pre>';
$x = $way.'\output.txt'; //создаем путь к файлу output.txt(сгенерированный пароль) в виде переменной x
echo file_get_contents($x); //отображаем переменную x на сайте
$clear = fopen($way.'\input.txt', 'w'); //очистить файл input.txt
fclose($clear);
$clear = fopen($way.'\output.txt', 'w'); //очистить файл output.txt
fclose($clear);
?>
Постарался максимально подробно дать комментарии для каждой строки.
Должно получится вот так

Все выше перечисленные файлы: Скачать
- Если нужно вставить этот скрипт на другом сайте можно использовать Iframe
<head>
<title>saniaowner|Pass</title>
</head>
<body>
<iframe src="https://test.saniaowner.space/test/forma.php" width="100%" height="120px" frameborder="0" scrolling="auto"> </iframe>
</body>
</html>
src="https://test.saniaowner.space/test/forma.php"
— путь к форме.width="100%"
— ширина 100%.height="120px"
— высота 120px. Если нужно укажите свою высоту.frameborder="0"
— толщина рамки 0.scrolling="auto"
— если случайно установите высоту меньше чем сама форма включится скроллинг.
