Автоматизация рутины на ПК

Хочу рассказать о простой и доступной программке AutoHotkey, с помощью которой вы можете быстро выполнять однообразную и монотонную работу за компьютером, например, удалять свои посты и комментарии. К тому же она способна находить нужные изображения на экране. Наглядно покажу как ее использовать на примере простановки лайков на ДТФ.

Перед началом работы

Сначала найдите и установите себе саму программу. Она бесплатная, легкая и в открытом доступе. После установки создайте в любом месте папку с любым названием и в ней создайте текстовый файл.

Затем поменяйте формат текстового файла на "ahk".
Затем поменяйте формат текстового файла на "ahk".

Создаем изображения для поиска

Теперь нам нужно создать образцы картинок, которые мы будем искать на экране. Делаем снимок экрана кнопкой "PRT SC" на клавиатуре и в базовом пейнте обрезаем по контуру нужного объекта и сохраняем в той же папке.

Обрезаем изображения возможных непроставленных лойсов по выделенной желтой рамке.
Обрезаем изображения возможных непроставленных лойсов по выделенной желтой рамке.
В результате в нашей папке будут находиться такие файлы.
В результате в нашей папке будут находиться такие файлы.

Пишем код для определения координат курсора

Открываем наш текстовый файл в любом редакторе, например, через стандартный блокнот и пишем в нем следующее.

Numpad5:: return

Здесь "Numpad5" - это обозначение клавиши 5 на нумпаде.

Все что после знаков "::" это выполняемый при нажатии код.

Окончание действий клавиши обозначается через "return". Это база и основа любого кода. Сейчас он не делает ничего.

У программы есть Вики на русском языке, где можно посмотреть коды любых других клавиш.
У программы есть Вики на русском языке, где можно посмотреть коды любых других клавиш.

Теперь напишем код для поиска координат курсора мыши.

Numpad5:: ; нажмите для определения координат мыши MouseGetPos, xpos, ypos Msgbox Coordinates: X%xpos% Y%ypos%. return

Знак ";" обозначает начало текстового комментария. Вся строчка после него не считывается программой, это подсказка для вас самих, чтобы не теряться в тексте кода.

Функция "MouseGetPos" считывает текущие координаты мыши и записывает их в переменные "xpos" и "ypos". Последним двум можно задать любое произвольное название (главное, чтобы оно не совпадало с названием других встроенных функций).

Функция "Msgbox" создает текстовое сообщение на экране, где "Coordinates: X%xpos% Y%ypos%." - это выводимый текст, а значения переменных "xpos" и "ypos" в нем находятся между знаками "%", чтобы не путать с остальным текстом.

Конечно же, есть и подробные описания работы функций.
Конечно же, есть и подробные описания работы функций.

Записываем координаты активного экрана

Теперь мы можем двойным кликом запустить наш код и удостовериться, что он работает. В случае чего вносим правки и перезапускаем его командой "Reload This Script".

Не забывайте делать это после правок кода.
Не забывайте делать это после правок кода.

Теперь открываем рабочее пространство. В нашем случае это свежее на ПДФ. Располагаем курсор поочередно в границах активного пространства, где могут находиться искомые изображения лойсов.

Нас интересует верхняя левая и нижняя правая точки, отмеченные желтыми пометками.
Нас интересует верхняя левая и нижняя правая точки, отмеченные желтыми пометками.

Имейте ввиду, что у разных активных окон могут быть разные системы отсчета, а координаты не совпадать, даже находясь в одной точке экрана.

Это может быть заметно в более сложных алгоритмах.

Пишем основной код

Возвращаемся в редактор. Для начала добавим вот такую команду.

Numpad5:: ; нажмите для определения координат мыши MouseGetPos, xpos, ypos Msgbox Coordinates: X%xpos% Y%ypos%. return Numpad7:: Pause, Toggle return

Здесь мы задали на кнопку "Numpad7" команду поставить работу кода на паузу с помощью функции "Pause". Это нам пригодится, чтобы остановить код, если что-то пойдет не так в процессе его работы. Ведь в дальнейшем он будет управлять курсором мыши, и вы не сможете ему иначе помешать.

Далее пишем функцию для поиска изображения на экране и простановки лайка.

Numpad5:: ; нажмите для определения координат мыши MouseGetPos, xpos, ypos Msgbox Coordinates: X%xpos% Y%ypos%. return Numpad7:: Pause, Toggle return Numpad1:: ImageSearch, xp, yp, 490, 226, 1305, 1022, *50 loyse1.png if xp > 0 MouseClick, left, xp, yp, 1, 4 return

Здесь при нажатии клавиши "Numpad1" выполняется функция поиска совпадений по изображению и нажатие на него.

Сначала функция "ImageSearch" ищет изображение "loyse1.png" между координатами "490, 226, 1305, 1022," с точностью "*50" и записывает его координаты в переменные "xp, yp". Если совпадения не обнаружено, то в переменные заносятся значения "0".

Как можно догадаться, координаты для поиска взяты с предыдущего шага и записываются по порядку попарно:

Координаты верхней левой точки, а после нижней правой.

ИЛИ х1, у1, х2, у2.

Точность *50 - это среднее значение точности и менять его нет необходимости в большинстве случаев.

Далее пишется проверка командой "if xp > 0". Она проверяет, нашла ли предыдущая функция совпадение по изображению. Все, что пишется после "if" срабатывает только при выполнении записанного условия. Т.е. если "xp > 0". В противном случае ничего не происходит.

Но если совпадение найдено, то выполняется функция "MouseClick", которая нажимает "left" - левую кнопку мыши (а если написать "right", то правую), в координатах на активном экране "xp, yp" (здесь введены ранее полученные координаты), в количестве "1" раз со скоростью "4" (чем выше число, тем медленнее, 1 - самая быстрая скорость).

Перед функцией я проставила большой пробел (табуляцию), чтобы наглядно было видно, что она относится к условию выше.

Но можете не ставить.

Можете проверить работу кода. Теперь при нажатии "Numpad1", код будет искать на экране совпадение и нажимать на него.

Добавляем остальные искомые элементы

Пока мы прописали поиск одного элемента из трех. Добавляем и их.

Numpad1:: ImageSearch, xp, yp, 490, 226, 1305, 1022, *50 loyse1.png if xp > 0 MouseClick, left, xp, yp, 1, 4 else ImageSearch, xp, yp, 490, 226, 1305, 1022, *50 loyse2.png if xp > 0 MouseClick, left, xp, yp, 1, 4 else ImageSearch, xp, yp, 490, 226, 1305, 1022, *50 loyse3.png if xp > 0 MouseClick, left, xp, yp, 1, 4 return

Теперь у нас есть сложная конструкция "if" - "else". Как вы уже знаете, все что после "if", выполняется при соблюдении условий, а для противного случая используется команда "else". Она неразрывно используется только в связке, сама по себе отдельно она не работает.

Иначе говоря, если код не находит совпадений с "loyse1.png", то ищет "loyse2.png", а если не найдет и его, то ищет "loyse3.png". Таким образом можно выстраивать бесконечный перебор всех искомых вариантов.

Теперь при нажатии "Numpad1" код проставит лойс при нахождении всех вышеперечисленных трех случаев.

Скроллинг страницы и полная автономность

Хоть код ставит лойсы сам, нам все еще необходимо вручную листать стену и нажимать клавишу его запуска. Исправим это.

Numpad1:: Loop, { ImageSearch, xp, yp, 490, 226, 1305, 1022, *50 loyse1.png if xp > 0 MouseClick, left, xp, yp, 1, 4 else ImageSearch, xp, yp, 490, 226, 1305, 1022, *50 loyse2.png if xp > 0 MouseClick, left, xp, yp, 1, 4 else ImageSearch, xp, yp, 490, 226, 1305, 1022, *50 loyse3.png if xp > 0 MouseClick, left, xp, yp, 1, 4 else send, {Wheeldown 2} } return

Здесь мы добавили пару элементов. Первый - скроллинг.

... else send, {Wheeldown 2} ...

Здесь после еще одного "else" стоит функция "send, {Wheeldown 2}", которая командой "Wheeldown" имитирует прокручивание колесика мыши вниз (а "Wheelup" - скроллинг вверх) со скоростью "2". Команда "send" говорит коду нажать указанную в "{...}" кнопку.

Иначе говоря, если код не находит совпадений по изображению, то будет скроллить страницу вниз.

Однако, он сделает это лишь один раз. Для полной автоматизации нам нужно, чтобы код выполнял команду непрерывно, т.е. зациклил ее. Для этого применяется еще одно добавление в начале и конце.

Numpad1:: Loop, { ... } return

Вот этот вот элемент. Функция "Loop" говорит коду выполнять то, что находится между "{...}" бесконечно (а у нас там все вышеперечисленное), пока вы не прервете код.

Вот для этого мы и вводили возможность поставить его на паузу кнопкой "Numpad7".

По итогу вы получите что-то такое:

Не могу определиться :с

Конечно, не стоит ожидать от программы всемогущества, за ней нужно периодически приглядывать и вносить корректировки. Например, проблему выше можно решить парой вариантов:

  • оставить лишь один вариант простановки лайка
  • ставить его через общую панельку лайков
  • сузить поле поиска совпадений до первого смайла из уже проставленных
Так вы сможете даже проставить клоунсов под всеми постами ПДФа.
Так вы сможете даже проставить клоунсов под всеми постами ПДФа.

Надеюсь, этого простенького вводного курса вам хватит, чтобы заинтересоваться и освоить сей полезный инструмент. С помощью него, я смогла удалить 19к+ сообщений в телеге на всякий случай перед началом сентября.

37
9
3
2
2
2
41 комментарий