Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: Эта возможность может быть недоступна в некоторых браузерах.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Доброе время суток, форумчане. Итак приступим. Многие из нас помнят статью от моего товарища Serkser http://zennolab.com/discussion/thre...lenie-oknami-ljubyx-drugix-prilozhenij.27491/. Статья отличная, да правда порог вхождения ну очень высок. Я думаю 90 процентов юзеров прочитались, восхитились и все - дальше этого дело не пошло. Даже для меня это было сложновато на первых порах.
Сегодня я покажу вам как не обладая большими знаниями в кодинге автоматизировать работу в любом приложении. Использовать мы будем обертку над autoit. Они прикреплены к проекту.
Часть первая. Теория
Для того чтобы работать с окном программы нам нужно понять пару определений
Window - окно приложения Control - элемент управления (button, label и т.д)
Т.е. по сути есть главное окно и на нам разбросано множество контролов. Для подробного объяснения откроем калькулятор.
Есть главное окно (выделено красным) и есть контролы (выделено синим). По сути контролы это button-простые кнопки. Посмотреть вложение 17458
Получается древовидная структура.
Это самый простой случай. Бывает что у каждого контрола есть свои контролы. Идем дальше.
У каждого окна (Window) есть ряд параметров (рассмотрим основные). Посмотреть вложение 17459 Title - Заголовок (у меня англ. версия Windows - у вас скорей всего будет просто Калькулятор) Class - Базовый класс окна Position - Текущая позиция окна в системе. Size - Размер окна Handle - Дескриптор окна.
Я думаю у всех возник вопрос - что за дескриптор такой. Не буду грузить ссылками из msdn. Дескриптор (дословно - описатель) - код, определяющий какой-то ресурс в системе. Грубо говоря - номер окна в системе. Handle, HNDL, Дескриптор - это одно и тоже.
Class - Класс контрола Instance - порядковый номер экземпляра контрола. Advanced Mode - Расширений вид Position - Текущая позиция окна в системе. Size - Размер окна Handle - Дескриптор контрола.
Работа с autoit будет вестись с помощью специальной библиотеки - обертки для нее на c#. В данной библиотеке реализовано почти 80 методов. Некоторые из них думаю нет смысл использовать так как уже реализовано в зеннке.
Дабы вы поняли насколько легко работать с данной библиотекой я покажу просто метод клика по координатам x,y.
MouseClick Выполнение клика мышью.
Параметры
Button
Типы значений:
“right” – правая кнопка мыши
“middle” –средняя кнопка мыши
“left” – левая кнопка мыши
x, y
[необязательный] Координаты x и y указывают на точку для клика. Если они не указаны, то клик идет в текущем расположении мыши.
clicks
[необязательный] Количество кликов. По умолчанию 1.
speed
необязательный] Скорость перемещения мыши в диапазоне от 1(быстро) до 100(медленно). Если значение скорости равно 0, то мышь перемещается мгновенно. Скорость по умолчанию равна 10.
Данный метод работает без дескриптора окна, да в принципе даже и без координат. Единственный обязательный параметр это какую кнопки мыши нам нужно нажимать. Если мы не укажем координаты, то он кликнет по текущем расположению указателя мыши.
Чтобы работать с элементами формы да и с самой формой нам нужно узнать дескриптор (Handle) окна.
WinGetHandle Выполнение клика мышью.
Параметры
Заголовок/дескриптор/класс окна[необязательный] Текст окна
title
Заголовок/дескриптор/класс окна.
text
[необязательный] Текст окна.
[TBODY] [/TBODY]
Смотрим параметры окна. Мы можем получить дескриптор окна по Title(заголовку окна).
Запускаем код. Видим шесть цифр - это и есть наш хендл(дескриптор). 921668 это предстваление в десятеричной системе счисления - в 16-ой это число E1044. Как мы результат совпадает с тем что мы видим выше. (0x00000000000E1044) Посмотреть вложение 17463
Теперь попробуем нажать любую кнопку. Допустим цифру 5. Но сперва нам надо получить хендл(дескриптор) контрола а затем уже кликать. За это отвечают два метода ControlGetHandle и ControlClick. В принципе из названия понятно что они делают.
Алгоритм работы во всех случаях один.
1) Запускам Au3Info (Autoit Window Info)
2) Находим хендл(дескриптор) главного окна
3) Находим хендл контролла
4) В бой!
1) Handle главного окна я нахожу по заголовку (Title) моего окна скайп.
2) Handle элемента для поиска мы берем по Advanced Mode [CLASS:TSearchControl; INSTANCE:1]
3) Тут важный момент. Прежде чем набирать текст нужно сделать активным окно скайпа. В случае с калькулятором оно не нужно было, а тут необходимо. Используем WinActivate (https://autoit-script.ru/autoit3_docs/functions/WinActivate.htm)
4) Кликаем с помощью метода Send (описание тут https://autoit-script.ru/autoit3_docs/functions/Send.htm )
Код:
var handle = AutoItX.WinGetHandle("Skype™ - ahvahsky2008");
var editbox = AutoItX.ControlGetHandle(handle, "[CLASS:TSearchControl; INSTANCE:1]");
AutoItX.WinActivate(handle);
AutoItX.Send("test", 1);
Для смены будем юзать Technitium MAC Address Changer. Ссылка тут https://technitium.com/tmac/
Алгоритм очень интересен.
1) Находим хендл окна. Technitium MAC Address Changer v6 - by Shreyas Zare
2) Находим хендл контрола, который отображает список сетевых интерфейсов. Я знаю что это элемент ListView и для работы с ней есть спец. метод. (PS можно в принципе сделать клик по координатам, если не хотите парится). Так вот. Сперва надо посчитать сколько элементов в списке.
Я делаю это с помощью след. кода. В отладчике вижу цифру 2 - все четко
C#:
var count = AutoItX.ControlListView(handle, listview, "GetItemCount", "", "");
4) Тут уже все попроще. Находим хендлы двух кнопок - сперва рандомизация мака, а потом применение изменений.
5) На гифке показано как все работает. На доли секунд можете увидеть скайп который потерял сигнал из-за смены мака.
Полный код.
C#:
var handle = AutoItX.WinGetHandle("Technitium MAC Address Changer v6 - by Shreyas Zare");
var listview = AutoItX.ControlGetHandle(handle, "[CLASS:ListView20WndClass; INSTANCE:10]");
AutoItX.WinActivate(handle);
var count = AutoItX.ControlListView(handle, listview, "GetItemCount", "", "");
AutoItX.ControlListView(handle, listview, "Select", "0", "1");
var randomBtn = AutoItX.ControlGetHandle(handle, "ThunderRT6CommandButton7");
AutoItX.ControlClick(handle, randomBtn);
var changeBtn = AutoItX.ControlGetHandle(handle, "ThunderRT6CommandButton6");
AutoItX.ControlClick(handle, changeBtn);
Viber
Тут мы сталкиваемся с некоторыми траблами. Так как прога написана на QT в силу некоторых ньансов Autoit Info нам не покажет кроме хендла главного окна ничего. Ну ниче. Будем работать с координатами.
1) Получаем хендл окна по заголовку (Title)
2) Нам надо форму привязать к верхней левой части окна
3) Кликаем по 4 кнопке сверху Посмотреть вложение 17468
4) Кликаем по полю ввода для его активации
5) Вводим номер телефона
Заметил такой момент если в PM в настройках инстанса поставить Cromium(beta), то AutoIt даже мышкой двигать не хочет ZP 7.7.12
кто с таким сталкивался?