- Регистрация
- 23.05.2014
- Сообщения
- 1 500
- Благодарностей
- 1 268
- Баллы
- 113
Доброе время суток, форумчане. Итак приступим. Многие из нас помнят статью от моего товарища Serkser http://zennolab.com/discussion/threads/pm-winapi-ili-upravlenie-oknami-ljubyx-drugix-prilozhenij.27491/. Статья отличная, да правда порог вхождения ну очень высок. Я думаю 90 процентов юзеров прочитались, восхитились и все - дальше этого дело не пошло. Даже для меня это было сложновато на первых порах.
Сегодня я покажу вам как не обладая большими знаниями в кодинге автоматизировать работу в любом приложении. Использовать мы будем обертку над autoit. Они прикреплены к проекту.
Часть первая. Теория
Для того чтобы работать с окном программы нам нужно понять пару определений
Window - окно приложения
Control - элемент управления (button, label и т.д)
Т.е. по сути есть главное окно и на нам разбросано множество контролов. Для подробного объяснения откроем калькулятор.
Есть главное окно (выделено красным) и есть контролы (выделено синим). По сути контролы это button-простые кнопки.
Получается древовидная структура.
Это самый простой случай. Бывает что у каждого контрола есть свои контролы. Идем дальше.
У каждого окна (Window) есть ряд параметров (рассмотрим основные).
Title - Заголовок (у меня англ. версия Windows - у вас скорей всего будет просто Калькулятор)
Class - Базовый класс окна
Position - Текущая позиция окна в системе.
Size - Размер окна
Handle - Дескриптор окна.
Я думаю у всех возник вопрос - что за дескриптор такой. Не буду грузить ссылками из msdn. Дескриптор (дословно - описатель) - код, определяющий какой-то ресурс в системе. Грубо говоря - номер окна в системе. Handle, HNDL, Дескриптор - это одно и тоже.
У каждого контрола также есть список параметров.
Class - Класс контрола
Instance - порядковый номер экземпляра контрола.
Advanced Mode - Расширений вид
Position - Текущая позиция окна в системе.
Size - Размер окна
Handle - Дескриптор контрола.
Наверное у каждого возник вопрос - что за прога такая, которая показывает информацию об окне. Это прога Au3Info, которая идет в пакете с autoit. https://www.autoitscript.com/site/autoit/downloads/
В данной библиотеке реализовано почти 80 методов. Некоторые из них думаю нет смысл использовать так как уже реализовано в зеннке.
Дабы вы поняли насколько легко работать с данной библиотекой я покажу просто метод клика по координатам x,y.
[TBODY]
[/TBODY] Пример использования
Данный метод работает без дескриптора окна, да в принципе даже и без координат. Единственный обязательный параметр это какую кнопки мыши нам нужно нажимать. Если мы не укажем координаты, то он кликнет по текущем расположению указателя мыши.
Чтобы работать с элементами формы да и с самой формой нам нужно узнать дескриптор (Handle) окна.
Заголовок/дескриптор/класс окна[необязательный] Текст окна
[TBODY]
[/TBODY]Смотрим параметры окна. Мы можем получить дескриптор окна по Title(заголовку окна).
Запускаем код. Видим шесть цифр - это и есть наш хендл(дескриптор). 921668 это предстваление в десятеричной системе счисления - в 16-ой это число E1044. Как мы результат совпадает с тем что мы видим выше. (0x00000000000E1044)
Теперь попробуем нажать любую кнопку. Допустим цифру 5. Но сперва нам надо получить хендл(дескриптор) контрола а затем уже кликать. За это отвечают два метода ControlGetHandle и ControlClick. В принципе из названия понятно что они делают.
[TBODY]
[/TBODY]
[TBODY]
[/TBODY]Теперь смотрим по каким параметрам можем найти контрол.
Видим ClassnameNN и Advanced Mode. Вот по ним и будем искать.
Вот еще один вариант. Результат один и тот же.
Думаю хватит нам калькуляторов и всяких хеллоу-вордов. В ранних статьях я описывал работу в скайпе http://zennolab.com/discussion/threads/zennoposter-i-skype-desktop-versija.23980/. Однако у нее есть масса ограничений, которые мы щас попробуем обойти.
Алгоритм работы во всех случаях один.
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 )
иии.. Вуаля!
Меняем Mac AdressДля смены будем юзать Technitium MAC Address Changer. Ссылка тут https://technitium.com/tmac/
Алгоритм очень интересен.
1) Находим хендл окна. Technitium MAC Address Changer v6 - by Shreyas Zare
2) Находим хендл контрола, который отображает список сетевых интерфейсов. Я знаю что это элемент ListView и для работы с ней есть спец. метод. (PS можно в принципе сделать клик по координатам, если не хотите парится). Так вот. Сперва надо посчитать сколько элементов в списке.
Я делаю это с помощью след. кода. В отладчике вижу цифру 2 - все четко
Описание метода ControlListView https://autoit-script.ru/autoit3_docs/functions/ControlListView.htm
3) Далее выделяем второй элемент в списке. Первый у меня от виртуалки кажись.
4) Тут уже все попроще. Находим хендлы двух кнопок - сперва рандомизация мака, а потом применение изменений.
5) На гифке показано как все работает. На доли секунд можете увидеть скайп который потерял сигнал из-за смены мака.
Полный код.
ViberТут мы сталкиваемся с некоторыми траблами. Так как прога написана на QT в силу некоторых ньансов Autoit Info нам не покажет кроме хендла главного окна ничего. Ну ниче. Будем работать с координатами.
1) Получаем хендл окна по заголовку (Title)
2) Нам надо форму привязать к верхней левой части окна
3) Кликаем по 4 кнопке сверху
4) Кликаем по полю ввода для его активации
5) Вводим номер телефона
Друзья, коллеги, форумчане. Каждый ваш голос это мотивация для написания таких же интересных статей) Я старался для вас)
Сегодня я покажу вам как не обладая большими знаниями в кодинге автоматизировать работу в любом приложении. Использовать мы будем обертку над autoit. Они прикреплены к проекту.
Часть первая. Теория
Для того чтобы работать с окном программы нам нужно понять пару определений
Window - окно приложения
Control - элемент управления (button, label и т.д)
Т.е. по сути есть главное окно и на нам разбросано множество контролов. Для подробного объяснения откроем калькулятор.
Есть главное окно (выделено красным) и есть контролы (выделено синим). По сути контролы это button-простые кнопки.
Получается древовидная структура.
Это самый простой случай. Бывает что у каждого контрола есть свои контролы. Идем дальше.
У каждого окна (Window) есть ряд параметров (рассмотрим основные).
Title - Заголовок (у меня англ. версия Windows - у вас скорей всего будет просто Калькулятор)
Class - Базовый класс окна
Position - Текущая позиция окна в системе.
Size - Размер окна
Handle - Дескриптор окна.
Я думаю у всех возник вопрос - что за дескриптор такой. Не буду грузить ссылками из msdn. Дескриптор (дословно - описатель) - код, определяющий какой-то ресурс в системе. Грубо говоря - номер окна в системе. Handle, HNDL, Дескриптор - это одно и тоже.
У каждого контрола также есть список параметров.
Class - Класс контрола
Instance - порядковый номер экземпляра контрола.
Advanced Mode - Расширений вид
Position - Текущая позиция окна в системе.
Size - Размер окна
Handle - Дескриптор контрола.
Наверное у каждого возник вопрос - что за прога такая, которая показывает информацию об окне. Это прога Au3Info, которая идет в пакете с autoit. https://www.autoitscript.com/site/autoit/downloads/
Часть вторая. Теория практики.
Работа с 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 | [необязательный] Текст окна. |
Запускаем код. Видим шесть цифр - это и есть наш хендл(дескриптор). 921668 это предстваление в десятеричной системе счисления - в 16-ой это число E1044. Как мы результат совпадает с тем что мы видим выше. (0x00000000000E1044)
Теперь попробуем нажать любую кнопку. Допустим цифру 5. Но сперва нам надо получить хендл(дескриптор) контрола а затем уже кликать. За это отвечают два метода ControlGetHandle и ControlClick. В принципе из названия понятно что они делают.
ControlGetHandle
Возвращает внутренний указатель элемента.
Возвращает внутренний указатель элемента.
title | Заголовок/дескриптор/класс окна. |
text | Текст окна. |
controlID | Идентификатор элемента управления |
ControlClick
Эмулирует нажатие мыши на указанный элемент интерфейса.
Эмулирует нажатие мыши на указанный элемент интерфейса.
title | Заголовок/дескриптор/класс окна |
text | Текст окна |
controlId | Идентификатор элемента управления |
button | [необязательный] Кнопка мыши, которой эмулировать нажатие: "left", "right", "middle", "main", "menu", "primary", "secondary". По умолчанию левая кнопка. |
clicks | [необязательный] Количество кликов мыши. По умолчанию 1. |
x | [необязательный] Координата X для клика внутри элемента, относительно левого верхнего угла элемента. По умолчанию в центре. |
y | [необязательный] Координата Y для клика внутри элемента, относительно левого верхнего угла элемента. По умолчанию в центре. |
Видим ClassnameNN и Advanced Mode. Вот по ним и будем искать.
Вот еще один вариант. Результат один и тот же.
Часть третья. Практика.
Думаю хватит нам калькуляторов и всяких хеллоу-вордов. В ранних статьях я описывал работу в скайпе http://zennolab.com/discussion/threads/zennoposter-i-skype-desktop-versija.23980/. Однако у нее есть масса ограничений, которые мы щас попробуем обойти.
Алгоритм работы во всех случаях один.
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);
Меняем Mac Adress
Алгоритм очень интересен.
1) Находим хендл окна. Technitium MAC Address Changer v6 - by Shreyas Zare
2) Находим хендл контрола, который отображает список сетевых интерфейсов. Я знаю что это элемент ListView и для работы с ней есть спец. метод. (PS можно в принципе сделать клик по координатам, если не хотите парится). Так вот. Сперва надо посчитать сколько элементов в списке.
Я делаю это с помощью след. кода. В отладчике вижу цифру 2 - все четко
C#:
var count = AutoItX.ControlListView(handle, listview, "GetItemCount", "", "");
3) Далее выделяем второй элемент в списке. Первый у меня от виртуалки кажись.
C#:
AutoItX.ControlListView(handle, listview, "Select", "0", "1");
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
1) Получаем хендл окна по заголовку (Title)
2) Нам надо форму привязать к верхней левой части окна
3) Кликаем по 4 кнопке сверху
4) Кликаем по полю ввода для его активации
5) Вводим номер телефона
C#:
var handle = AutoItX.WinGetHandle("Viber +79285533129");
AutoItX.WinActivate(handle);
AutoItX.WinMove(handle, 0, 0);
AutoItX.MouseClick("LEFT", 278, 102);
AutoItX.MouseClick("LEFT", 136, 183);
AutoItX.Send("79285533129");
- Тема статьи
- Другое
- Номер конкурса статей
- Шестой конкурс статей
Вложения
-
42,6 КБ Просмотры: 1 644
-
91,7 КБ Просмотры: 1 689
-
324,7 КБ Просмотры: 1 910
-
54,2 КБ Просмотры: 2 054
-
371,5 КБ Просмотры: 2 486
Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.
Последнее редактирование: