Определяем текущее положение курсора мыши с Python

В прошлой статье мы говорили об автоматизации графического интерфейса с Python и библиотекой pyautogui, что предполагает симуляцию действий с клавиатурой, мышью и не только. И для написания скрипта симуляции мыши важно найти координаты курсора в текущий момент, и постоянно отображать их. В данной статье мы напишем простой скрипт для решения данной задачи.
Для этого нам нужно во первых отобразить текущие координаты мыши, во вторых обновить их в соответствии с перемещением курсора по экрану. На уровне кода мы должны вызвать функцию position(), для получения текущих координат, затем при перемещении курсора стереть предыдущие координаты используя символ \b и обработать исключение KeyboardInterrupt так чтобы сочетание клавиш CTRL-C вызвало выход.
Откроем текстовый редактор и создадим файл с именем Mouse_now.py. Поместим в него наш код:
# На первом этапе импортируем модули pyautogui, time. Также напечатаем напоминание пользователю, о возможности выхода из программы нажав CTRL-C
import pyautogui
import time
print(«Press CTRL-C to quit»)
'''
Для постоянного вывода текущих координат из mouse.position() можно использовать бесконечный цикл. А для кода завершающего программу нужно будет перехватить исключение KeyboardInterrupt, которое возникает всякий раз, когда пользователь нажимает CTRL-C.
Если этого не сделать то try/exept отобразит уродливую строку сообщения об ошибке.
И чтобы обработать цикл заключим его в оператор try '''
try:
while True:
# получение текущих координат
x, y = pyautogui.position()
# метод str(x) превращает число в строку а rjust(4) сдвигает его на четыре позиции вправо
positionStr = 'X:'+ str(x).rjust(4) +' Y:'+ str(y).rjust(4)
# end предотвращает добавление символа новой строки, без этого старые координаты удалить не получится
print(positionStr, end = '')
# escape-символ \ b стирает конец строки и чтобы удалить всю строку умножаем его на длину строки
print('\b'*len(positionStr), end = '', flush = True)
# для предотвращения мигания при выполнении цикла используем засыпание
time.sleep(0.01)
# Когда пользователь нажимает CTRL-C, выполнение программы переходит к разделу except и # Done будет напечатан с новой строки
except KeyboardInterrupt:
print('\nDone')
Когда программа запустится, будут напечатаны только две строки. Они должны выглядеть примерно так:
# вывод
Press Ctrl-C to quit
X: 165 Y: 144
Таким образом с помощью данного скрипта, вы можете определить координаты мыши для ваших сценариев автоматизации графического интерфейса.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Определение координат курсора мыши
Возможности jQuery практически безграничны, главное преимущество — интерактивность. Благодаря jQuery можно создавать очень интересные проекты: будь то разработка сайта коттеджного посёлка или создание лендинг пейдж.
Очень часто нужно знать координаты курсора мыши, чтобы внедрить интерактив с пользователем. Сделать это очень просто, создав функцию, которая будет вызываться при событии mousemove и через event.pageX и event.pageY можно получить координаты курсора.
Помимо этого есть возможность определять координаты относительно другого объекта на сайте. Для этого нужно знать координаты самого объекта и инициализировать функцию определения координат при наведении на нужный объект.
Автоматизация рутины с AutoHotKey. Часть 2: Распознавание экрана.
За прошедший год мое владение скриптами немного улучшилось, в частности, теперь я могу научить скрипт распознавать изображение на экране, искать всякие кнопки, рисунки и т.д.
Давайте попробуем какую-нибудь незатейливую программу, например игрушку сапер.
Научим скрипт реагировать на нашу смерть.

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

Обрезаем и сохраняем в файл smert.png. Можно сохранять и в bmp и в jpg, Autohotkey кушает их всех.
Получился вот такой небольшой файлик:

Этот кусочек изображения и будет искать скрипт.
Теперь нам нужны координаты области на экране, где скрипт будет производить поиск. Можно, конечно, сказать скрипту сканировать весь экран, но это нерационально и наверняка будет приводить к задержкам в работе.
Запускаем этот скрипт:
MouseGetPos, X, Y
При нажатии ctrl+F1 координаты курсора появятся на экране И скопируются в буфер обмена.

Наша задача: получить координаты вот этой области. А именно — координаты левого верхнего и правого нижнего углов. Подведите кончик курсора к ЛВ углу и нажмите Ctrl F1. Сохраните эти координаты. То же самое с ПН углом. (окно Сапера должно быть активным)

Теперь создайте следующий скрипт:
ImageSearch, xp, yp, 75, 61, 97, 83, *50 smert.png
Если скрипт ничего не находит, то переменным xp, yp присваивается пустое значение, Null.
Если находит, то в них вписываются координаты найденного изображения, срабатывает условие выхода из цикла и запускается следующая часть кода.
*50 отвечает за строгость поиска. *0 максимальная строгость, *255 минимальная.
F10 нужен для аварийного выхода из скрипта если вы вдруг создадите бесконечный скрипт, блокирующий ваши действия.
F12 для временного отключения/включения горячих клавиш.
Итак, расположите smert.png в одной папке со скриптом, запустите сапера, нажмите F1, и каждый 200 миллисекунд скрипт будет искать ваш файлик на экране.

Показано, конечно, на пример простой игрушки, но возможности применения поистине безграничны. Автоматизация офисных приложений, игр, промышленность, дизайнерские программы, и т.п. и т.д. на что хватит фантазии.
С уважением, netwizard.

3.8K постов 21.2K подписчиков
Правила сообщества
Публиковать могут пользователи с любым рейтингом. Однако мы хотим, чтобы соблюдались следующие условия:
ДЛЯ АВТОРОВ:
Приветствуются:
-уважение к читателю и открытость
Не рекомендуются:
-публикация недостоверной информации
ДЛЯ ЧИТАТЕЛЕЙ:
Приветствуются:
-конструктивные дискуссии на тему постов
Не рекомендуются:
-личные оскорбления и провокации
-неподкрепленные фактами утверждения
В этом сообществе мы все союзники — мы все хотим учиться! 🙂
Смотрю на всё это дело и вспоминаю себя лет эдак 4-5 назад 🙂
когда в diablo 3 ещё был аукцион, я запилил бота на «горячих клавишах». С 3D у него есть небольшие проблемы для распознования — но это не критично было. суть в том что бот сам за меня бегал на боса и выбивал мне дроп с голдой:)) буквально недавно решил вспомнить старые добрые и запилил на blueStacks ( эмулятор андроида ) автоматизацию игры пианино, не помню как она называется ( в крадце с верха экрана «падают» чёрные прямоугольники имитирующие ноты и на них надо нажимать до того момента пока они не скрылись под экраном, что то на подобие гитархиро) и только тогда я понял как ребята в топе рейтинга там набивают такие огромные количества очков — скорость «падения» нот приближалась к сверхпиксельной и сами ноты практически не видно — чтоб самому нажать и попасть по ним я вообще молчу 😀
Я помню на autohotkey писал скрипт для фарма ресурсов в одной гриндилке на 5 персонажей, через распознавание цвета пикселей на мини-карте. 5 персонажей гуськом бежали на место добычи ресурсов, копали, умирали, оживали и бежали дальше. Жуткое было зрелище со стороны.
Я правильно понял, что координаты берутся относительно экрана, а не окна программы и в случае если сдвинуть окно программы, то скрипт не сработает?
Ответ на пост «Как автоматизировать однотипную, монотонную работу бесплатно и без навыков программирования»
Эх, сколько раз меня выручала автоматизация! Вспомнил тут пару случаев. (если что то использую скрипты в AutoHotkey (AHK)).
Первый был когда еще в органах работал. Начальство придумало — а давайте все фабулы дел вносить в базу данных. При этом база данных не воспринимала копировать-вставить (что тупо), но база не публичная и вход через матюки и старый интернет эксплорер, так что работали как есть. Сидишь, придумываешь как это сократить и потом впечатываешь. Особенно сильно негодовали мы с другом, так как у нас были не перспективные дела (в отделе на каждого следака было по 10 дел в месяц, а у нас с ним напару под сотню, именно чтобы разгрузить остальных). И нам печатать было больнее всего. И тут я вспомнил про АНК и что он умеет печатать из буфера обмена — т.е. для меня это было копировать-вставить, а база воспринимала это словно я напечатал. Экономия во времени была колоссальная.
Второй момент был в учётке — меня молодого специалиста посадили править табличку учёта личных дел. Табличка была уже не помню в какой проге, но она тоже была с приветом. Там было около 20 000 позиций, где нужно было руками убирать пару символов в начале. И нельзя скопировать никуда (в эксель например), только работать руками. Дурь. Времени начальство выделило 2 дня, типа сиди молодой, правь строчки. Ну я два дня и использовал: 20 минут шаманства со скриптом, и уютное чтение книжки под чаек на этот и следующий день, пока строчки сами себя правят. Помню в середине процесса напарник пришел и запаниковал чего это я не работаю)
Да и мелкие задачи, если их можно автоматизировать, тоже переносятся в АНК. Из того что помню:
— тоже из учётки. Перешла к нам в отдел женщина, которая в работе разбиралась но с пк была на Вы. Очень мне не нравилось что она постоянно просила меня подойти и поставить апостроф, т.к. у неё не получалось (много раз в день, Карл!). На очередную просьбу я просто сделал ей скрипт который этот апостроф ставит по нажатию на Pause, а на клавиатуру напечатал на самоклейке этот апостроф и на эту кнопку наклеил.
— люблю смотреть видео из ютуба, предварительно скачивая их на телефон. Помогал мне в этом сейвфром, который умеет скачивать плейлисты из ютуба (умел по крайней мере пол года назад). Алгоритм такой — проклацивал кнопку «добавить в посмотреть позже» на подписках, потом весь плейлист скачивал, а потом удалял видео из плейлиста. Через месяц повторял. Но однажды ютуб поменял интерфейс и удаление перестало быть удобным — нужно нажать на выпадающее меню, и там уже «удалить из плейлиста». Что ломало мой алгоритм. И снова АНК. Скрипт на четыре кнопки — 1 и 2 запоминают позиции мыши (на выпадающем меню и на пункте «удалить»), третья запускает перемещение и клики мыши, четвертая останавливает скрипт. Итог — вручную делать уже не надо.
— в онлайн игре играл в 9 окон (ходил на рейд в соло в л2, управляя всем из одного) — это не продвинутый бот и пришлось помучаться но в итогесмог отправлять команды в свёрнутые окна не открывая из, было удобно; в другой игре был тупой крафт, где тоже нужно было прокликивать одни и те же места, тоже скрипт сработал.
— часто работаю в премьер про (программа видеомонтажа) и там некоторые удобные функции не реализованны, увы. Но они прекрасно допиливаются скриптом. Те же накидывания эффектов. Приходится переключаться на отдельную панель, имкать там эффект и перетаскивать на слой.Но те кто работал в АЕ с Fx console меня поймет, это можно сделать удобнее — скрипт сам делает все эти действия, еще и за секунду. Или еще пример. Часто приходится повышать уровень громкости, и это однотипное движение, особенно если видеофрагментов под сотню. Все вместе тоже нельзя — автоматика выровняет по самому громкому кусочку, что попортит все. Выручает скрипт. И еще полезность — горячие клавиши нельзя повесить на правую кнопку мыши, но иногда хочется — опять скрипт. Сделал перемещение курсора себе на пкм. Он еще и щупает что лежит под курсором и если там кусочек видео, то выпадает меню (как обычно), а если пустота то срабатывает горячая клавиша.
— надо было отстабилизировать много фрагметов видео. Алгоритм следющий — выделяем фрагмент, набрасываем на него стабилизатор, жмем «анализ», ждём пока пройдет анализ (каждый раз разное время, зависит от длинны кусочка видео), и переходим к следующему кусочку. И так пару сотен кусков. С коллегой решили что лучше потратить время на настройку скрипта и оставить компьютер на ночь чем сидеть руками делать. И помогло что скриптом можно определять открыто ли окно анализа, на что мы и ориентировались.
Если вы подумали, что для того чтобы сделать всё тут описанное нужны навыки програмирования, то вы ошибаетесь. Большая часть примеров была сделана путем копирования скрипров которые записаны в русской документации по программе (прямо напрячься пришлоь только в скрипте для игры). Да и на самом деле сейчас есть много других программ, в которых даже не нужно ничего писать текстом, записывай действия и все (как в оригинальном посте).
Поэтому помните, что автоматизация это бро. Иногда стоит потратить время на обдумывание однообразной задачи и попытки её автоматизировать.
Как узнать позицию курсора мыши относительно экрана?
Как узнать позицию курсора по координатам (X, Y) относительно экрана, не прибегая к средствам Windows.Forms ?
![]()
В WPF есть класс Mouse у которого есть метод GetPosition. Чтобы получить позицию курсора относительно экрана можно использовать метод PointToScreen
Или как еще один вариант — использовать PInvoke.
![]()
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.9.6.43612
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.