Как узнать координаты курсора на экране
Перейти к содержимому

Как узнать координаты курсора на экране

  • автор:

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

Определяем текущее положение курсора мыши с 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: Распознавание экрана. ⁠ ⁠

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

Давайте попробуем какую-нибудь незатейливую программу, например игрушку сапер.

Научим скрипт реагировать на нашу смерть.

Автоматизация рутины с AutoHotKey. Часть 2: Распознавание экрана. Автоматизация, Autohotkey, Длиннопост

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

Автоматизация рутины с AutoHotKey. Часть 2: Распознавание экрана. Автоматизация, Autohotkey, Длиннопост

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

Получился вот такой небольшой файлик:

Автоматизация рутины с AutoHotKey. Часть 2: Распознавание экрана. Автоматизация, Autohotkey, Длиннопост

Этот кусочек изображения и будет искать скрипт.

Теперь нам нужны координаты области на экране, где скрипт будет производить поиск. Можно, конечно, сказать скрипту сканировать весь экран, но это нерационально и наверняка будет приводить к задержкам в работе.

Запускаем этот скрипт:

MouseGetPos, X, Y

При нажатии ctrl+F1 координаты курсора появятся на экране И скопируются в буфер обмена.

Автоматизация рутины с AutoHotKey. Часть 2: Распознавание экрана. Автоматизация, Autohotkey, Длиннопост

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

Автоматизация рутины с AutoHotKey. Часть 2: Распознавание экрана. Автоматизация, Autohotkey, Длиннопост

Теперь создайте следующий скрипт:

ImageSearch, xp, yp, 75, 61, 97, 83, *50 smert.png

Если скрипт ничего не находит, то переменным xp, yp присваивается пустое значение, Null.

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

*50 отвечает за строгость поиска. *0 максимальная строгость, *255 минимальная.

F10 нужен для аварийного выхода из скрипта если вы вдруг создадите бесконечный скрипт, блокирующий ваши действия.

F12 для временного отключения/включения горячих клавиш.

Итак, расположите smert.png в одной папке со скриптом, запустите сапера, нажмите F1, и каждый 200 миллисекунд скрипт будет искать ваш файлик на экране.

Автоматизация рутины с AutoHotKey. Часть 2: Распознавание экрана. Автоматизация, Autohotkey, Длиннопост

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

С уважением, 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 ?

aleksandr barakin's user avatar

В WPF есть класс Mouse у которого есть метод GetPosition. Чтобы получить позицию курсора относительно экрана можно использовать метод PointToScreen

Или как еще один вариант — использовать PInvoke.

ApInvent's user avatar

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.9.6.43612

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *