Перейти к содержимому

Как имитировать нажатие клавиши python

  • автор:

Эмуляция нажатий клавиш клавиатуры на Python 3 под Windows

Каким образом можно симулировать нажатия клавиш клавиатуры, чтобы, например, запустив соответствующий скрипт, заданный текст сам набирался в сторонней программе? Однако больше интересует эмуляция сочетания клавиш, причем не символьных или цифирных, а таких как CTRL или SHIFT. Кроссплатформенность не важна.

Отслеживать
задан 16 янв 2017 в 13:11
Constantor Constantor
567 2 2 золотых знака 6 6 серебряных знаков 18 18 бронзовых знаков

Существовал SendKeys модуль, который легко позволял специальные клавиши использовать. Не знаю, работает ли на Python 3. Вот пример использования (в конце ответа.

16 янв 2017 в 14:00

Проблема в том, что через pip3 install sendkeys он не устанавливается, падает с ошибками, никак не исключёнными!

16 янв 2017 в 14:02

вполне вероятно. Модуль древний и главное его (варианта) достоинство было это простота и отсутствие зависимостей кроме ctypes (не могу сейчас исходник найти, вот пример как он мог выглядеть). pywinauto менее простой модуль, который также SendInput() API использует. Единственный недостаток pyautogui по сравнению с SendKeys, то что pillow является зависимостью, а так одни плюсы: также простой, но переносимый, поддерживает не только клавиши.

Работа бота: как симулировать нажатия клавиш в Python

Сегодня день рождения у Гвидо ван Россума, создателя Python. Поздравляем! Самое время поговорить о его детище и затронуть животрепещущую тему: как в Питоне имитировать нажатия клавиш при создании ботов. Суть бота — автоматическое выполнение действий, на которые не хочет тратить время человек. У программистов Python есть инструменты, позволяющие имитировать события клавиатуры и реагировать на них. Подборку таких инструментов вы и найдете ниже.

Зачем и кому это нужно

Поводы симулировать нажатие клавиш:

  • автоматизация — создание ботов для сайтов, приложений и игр. Пример: бот для автоматического заполнения форм или кормления/лечения игровых персонажей;
  • тестирование десктопных приложений — перебор возможных действий пользователя и реакций программы;
  • доступность — адаптация интерфейса для людей с ограниченными возможностями здоровья, в том числе за счёт эмуляции мыши (ведь без зрения ею не воспользуешься);
  • оптимизация — переназначение стандартных клавиш и/или замена недостающих кнопок физической клавиатуры.

Инструменты питониста для разных платформ

Для симуляции событий клавиатуры и мыши есть кроссплатформенный модуль PyUserInput , который работает поверх библиотек и фрейморков:

  • Xlib — в Linux,
  • Quartz и AppKit — на Mac,
  • pywin32, pyHook — в Windows.

Для Windows также стоит отметить:

pyautoit — это Python API к средству автоматизации AutoIt;

pywinauto — набор модулей, который автоматизирует взаимодействие с Microsoft Windows GUI. Библиотека написана на чистом Python — простейшие её функции по обработке событий мыши и клавиатуры работают и в Linux. Но более сложные возможности для работы с текстом заточены именно под Windows и доступны только там.

Актуальные версии этих инструментов поддерживают Python 3, более ранние — Python 2.

Как это работает: примеры

В директории examples каталога pywinauto на GitHub собраны два десятка наглядных примеров по использованию библиотеки. С их помощью вы можете прямо сейчас создавать ботов, которые умеют устанавливать/удалять программы, скачивать web-страницы, перетаскивать файлы между окнами, пакетно обрабатывать изображения в MS Paint и решать другие задачи.

Новички оценят читаемость кода:

from pywinauto.application import Application # Запускаем целевое приложение - обычный блокнот app = Application().start("notepad.exe") # Выбираем пункт меню app.UntitledNotepad.menu_select("Help->About Notepad") # Симулируем клик app.AboutNotepad.OK.click() # Вводим текст app.UntitledNotepad.Edit.type_keys("Заработало!", with_spaces = True)

Хорошо? Представьте, что вам нужно перенастроить приложение из дефолтного состояния на N-ном количестве компьютеров — выбрать нужные пункты меню, заполнить нужные поля. Или вы тестируете свою программу вдоль и поперёк, чтобы выявить сбои при обращении к GUI. Скрипт, который вам потребуется, будет длиннее, чем в примере выше, но по сути усложнится незначительно.

Добавьте сюда возможность работать с любыми приложениями на Win32 GUI и виджетами под интерфейс MS UI Automation.

Устанавливается pywinauto как обычный пакет — через pip install — и автоматически ставит еще несколько полезных компонентов: библиотеку pyWin32 , COM-клиент и серверный фрейморк comtypes , библиотеку six , которая обеспечивает совместимость Python 2 (начиная с 2.6) и 3. Всё это пригодится начинающему разработчику не только для создания ботов, но и в разработке собственных программных продуктов.

Симуляция нажатия клавиш клавиатуры на python

В данной статье рассмотрено три задачи, которые требуются чтобы управлять компьютером на windows с помощью скрипта python. В первую очередь будет показано как выбрать необходимое окно по названию, потом как симулировать ввод текста, нажатие на клавиши, и других операций (например выделение текста ctrl+a). А также будет показано как передвинуть курсор мыши в определенную точку xy и сделать клик.

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

# импортируем модули для работы с windows оберткой import win32api, win32con, win32gui import time, win32com.client #функция клика в определенном месте def click(x,y): # сначала выставляем позицию win32api.SetCursorPos((x,y)) time.sleep(0.2) # а потом кликаем (небольшая задержка для большей человечности) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0) time.sleep(0.3) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0) # данная функция - фильтр по выбору нужного окна (по названию этого окна) def openItNow(hwnd, windowText): if windowText in win32gui.GetWindowText(hwnd): win32gui.SetForegroundWindow(hwnd) # приступим time.sleep(3) # выбираем среди открытых окон то, которое содержит название Notepad # заметьте что используется фильтр, описанный выше win32gui.EnumWindows(openItNow, 'Notepad') # нажимать на клавиши будет с помощью shell shell = win32com.client.Dispatch("WScript.Shell") # метод SendKeys программно нажимает на клавиши, поэтому далее записана последовательность нажатий shell.SendKeys("%") for i in range(0,4,1): shell.SendKeys("") time.sleep(0.1) shell.SendKeys("") shell.SendKeys("") shell.SendKeys("") time.sleep(0.1) shell.SendKeys("~") time.sleep(7) for i in range(0,20,1): shell.SendKeys("") for i in range(0,11,1): shell.SendKeys("") #здесь выполняем комбинацию клавиш Alt + 9 shell.SendKeys("%9") # а теперь пара кликов click(300, 700) click(300, 600) shell.SendKeys('вводим текст') time.sleep(3) # и опять комбинация shell.SendKeys("^+")

Чтобы знать как симулировать нажатие разных клавиш (keypress), нам понадобится таблица с расшифровкой текст — клавиша.

Клавиша Аргумент
BACKSPACE , , or
BREAK
CAPS LOCK
DEL or DELETE or
DOWN ARROW
END
ENTER or ~
ESC
HELP
HOME
INS or INSERT or
LEFT ARROW
NUM LOCK
PAGE DOWN
PAGE UP
PRINT SCREEN
RIGHT ARROW
SCROLL LOCK
TAB
UP ARROW
F1
F2
F3
F4
F5
F6
F7
F8
F9
F10
F11
F12
F13
F14
F15
F16
SHIFT +
CTRL ^
ALT %
ENTER ~

Написав несколько таких скриптов (выполняющих определенную последовательность нажатий на клавиатуре) вы сможете существенно ускорить выполнение своих ежедневных операций!

Эмуляция нажатий клавиш в Python

Не могу эмулировать нажатие клавиш клавиатуры и кнопок клавиш мыши. Использовал pyautogui, pynput и прочие, в браузерах, в блокноте все работает, но когда пробую передать нажатие в игру ничего не происходит. Единственное, что я заметил, это если я ставлю курсов в строку чата и нажимаю клавишу шифт, то в чат клавиша вводится.

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

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

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

Обработка нажатий клавиш
У меня есть программа с несколькими потоками, один из них — это обработка нажатий клавиш, но я не.

Проблема с считыванием нажатий клавиш
Здравствуйте, уважаемые форумчани. Я с вопросом, написал простую заготовку, с обычным движением.

Эмуляция нажатий клавиш
У меня есть залогированы клавиши в блокноте в таком виде(много): Как мне заставить их из.

Эмуляция нажатий клавиш на php
Всем привет ! Ситуация такая – на сервер отсылаются исходники на С++, здесь они компилируются и на.

Регистрация: 07.03.2023
Сообщений: 11

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

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

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

Регистрация: 06.06.2022
Сообщений: 68

Pywinauto пробовал, защита есть.
Я однажды ставил модуль, там был фокус на окне, вот с ним вроде работало, но забыл его название, а код утерян.

Добавлено через 3 минуты
И кстати с правами администратора запустал, а также компилировал экзешник и его тоже от администратора запускал.
Причем через кликеры вроде как работает. Макросы внешней клавиатуры тоже работают.
Может есть возможность эмулировать нажатия внешней клавиатуры?
Я сделал почти полноценного бота с кучей проверок, а то, что нажатия не работают понял ооочень поздно.

Добавлено через 29 минут
У меня на клавиатуре 54 дополнительных настраиваемых клавиши, как-то ими можно через Питона управлять?

Просто Лис

Эксперт Python

5318 / 3332 / 1021
Регистрация: 17.05.2012
Сообщений: 9,765
Записей в блоге: 9

Лучший ответ

Сообщение было отмечено GmDio как решение

Решение

*шепчет* аппаратный эмулятор мыши на arduino

Добавлено через 1 минуту
А отправлять команды эмулятору перемигиванием лампочек num lock / caps lock / scroll lock

Регистрация: 06.06.2022
Сообщений: 68

Вот и я в ту степь вчера посмотрел.
Решил на Ардуино Леонардо сделать связку с питоном, так будет проще всего.

Ну или в целях экономии на про микро.

Питон будет работать как бот, а ардуинка обрабатывать сигналы и кидать их уже в игру.

И не дорого и точно будет работать.

Добавлено через 2 минуты Добавлено через 1 минуту
Только зачем отправлять команды перемигиванием? Если можно напрямую все делать?

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

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

Luxury Car Rental in Miami | Reserve a Premium Vehicle with RealCar