AutoIt — решение нерешаемых задач


AutoIt v3 — это бесплатный язык сценариев, подобный BASIC, разработанный для автоматизации графического интерфейса Windows и общих сценариев. Он использует комбинацию смоделированных нажатий клавиш, движения мыши и манипуляций с окном / элементами управления, чтобы автоматизировать задачи способом, невозможным или надежным с другими языками (например, VBScript и SendKeys). AutoIt также очень маленький, самодостаточный и будет работать на всех версиях Windows «из коробки» без раздражающих «сред выполнения»!

Пожалуй лучшего описания не стоит искать или придумывать.
Эта статья будет дополняться по мере моего познания этого языка.
У меня возникла идея управлять Windows программой с помощью веб-сайта. Чтение информации в интернете приводило к ступору, а точнее моя неправильная формулировка запроса поиска. Но вот спустя пару дней я нашел этот язык и решил попробовать автоматизировать процесс.

Часть 1

Теперь обрисую полную задачу и нужные компоненты:
Веб-форма (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.htm
  • WinWaitActive("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, и на выходе имеем сгенерированный ключ в поле PASSWORD
  • Send("{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 и добавим в нее файлы которые создали в первой части. Это должно выглядеть вот так
  • Настроим домен в автоматическом режиме. Чтобы создать домен или поддомен откройте [Меню → Папка с сайтами] и создайте папку с именем будущего домена. После создания домена перезапустите сервер.

Чтобы сайт был доступен в интернете обязательно нужен домен. Я рекомендую использовать проверенный и надежный домен который не подводит в сложные моменты.

Hosting Ukraine

Немного отступление от темы. Как то ночью мне не спалось и полез я редактировать настройки на хостинге. По итогу через пол часа сайт прилег, и не подавал признаков жизни. Обращение в тех. поддержку в 3 ночи решило вопрос за 10 мин (5 мин ждал ответ оператора и 5 мин пока настройки применились). В общим судите сами о тех.поддержке хостинга и моем нубстве.

  • Теперь создадим 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" — если случайно установите высоту меньше чем сама форма включится скроллинг.

Как я писал эту статью
Back to Top
Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

Powered By
Best Wordpress Adblock Detecting Plugin | CHP Adblock