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

Как считывать нажатия клавиш python

  • автор:

python 3 как отследить нажатие на кнопки

Отследить нажатие кнопок можно через модуль keyboard :

pip install keyboard 
  • Это пример для отслеживания клика по горячим кнопкам:
import keyboard def foo(): print('World') keyboard.add_hotkey('Ctrl + 1', lambda: print('Hello')) keyboard.add_hotkey('Ctrl + 2', foo) keyboard.wait('Ctrl + Q') 
import keyboard def print_pressed_keys(e): print(e, e.event_type, e.name) keyboard.hook(print_pressed_keys) keyboard.wait() 

Отслеживать
ответ дан 12 июн 2018 в 11:30
77.1k 6 6 золотых знаков 57 57 серебряных знаков 123 123 бронзовых знака

Вот таким способом решил эту задачу я:

import keyboard translate = < 'down':' нажал на клавишу ', 'up':' отпустил клавишу ' >def print_pressed_keys(e): print( 'Пользователь <><>'.format(translate[e.event_type], e.name) ) keyboard.hook(print_pressed_keys) keyboard.wait() 

Как видишь, я использовал модуль keyboard.
Подробнее ознакомиться с ним можно здесь

Отслеживать
ответ дан 12 июн 2020 в 20:05
101 9 9 бронзовых знаков

pip install pynput 

Вот таким способом:

from pynput.keyboard import Key, Listener def on_press(key): print(' pressed'.format(key)) def on_release(key): print(' release'.format(key)) if key == Key.esc: # Stop listener return False # Collect events until released with Listener(on_press=on_press, on_release=on_release) as listener: listener.join() 

Python | PyAutoGUI | Как сделать активацию по нажатии клавиши?

Как сделать активацию по нажатии клавиши в библиотеке PyAtuoGui
(Если нельзя)
То благодаря какой(му) библиотеке/коду можно?
(Библиотеки: Tkinter , Kivy — отпадают)
(Код:
key = input(‘Клавиша: ‘)
if key == a:
print(‘Нажата клавиша’ + a)
Так же отпадает, так как мне нужна активация в афк режиме (То есть не в программу вводить а просто на клавиатуре нажать)

  • Вопрос задан более трёх лет назад
  • 12766 просмотров

4 комментария

Средний 4 комментария

Meakin @Meakin Автор вопроса

Не думаю что я задал ультра-сверх сложный вопрос, почему 24 человека не могут мне помочь?
UPD: 48 Человек

Модуль pynput в Python, управление клавиатурой и мышью

Перехват и имитация событий клавиатуры и мыши из Python

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

  • pynput.keyboard — содержит классы для управления и мониторинга клавиатуры.
  • pynput.mouse — содержит классы для управления и мониторинга мыши или trackpad .

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

from pynput import mouse, keyboard 

Установка модуля pynput в виртуальное окружение.

Модуль pynput размещен на PyPI, поэтому установка относительно проста.

# создаем виртуальное окружение, если нет $ python3 -m venv .venv --prompt VirtualEnv # активируем виртуальное окружение $ source .venv/bin/activate # ставим модуль pynput (VirtualEnv):~$ python3 -m pip install -U pynput

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

Если заданы переменные окружения $PYNPUT_BACKEND_KEYBOARD или $PYNPUT_BACKEND , то их значение будет использоваться в качестве имени сервера для классов клавиатуры, а если заданы $PYNPUT_BACKEND_MOUSE или $PYNPUT_BACKEND , то их значение будет использоваться в качестве имени сервера для классов мыши.

Доступные серверные части являются:

  • darwin — значение по умолчанию для macOS.
  • win32 — значение по умолчанию для Windows.
  • xorg — значение по умолчанию для других операционных систем.
  • uinput — дополнительный серверный интерфейс для Linux, требующий привилегий root и поддерживающий только клавиатуры.
  • dummy — нефункциональный, но импортируемый серверный интерфейс. Он полезен в качестве серверной части мыши при использовании серверной части uinput .

Ограничения платформ.

Модуль pynput направлен на предоставление единого API для всех поддерживаемых платформ, но в некоторых случаях это не совсем возможно.

Ограничения платформы Linux.

В Linux, модуль pynput использует X -сервер или библиотеку uinput (требует root привилегий). При работе под X -сервером должно выполняться следующее:

  • X-сервер должен быть запущен.
  • Должна быть установлена ​​переменная окружения $DISPLAY .
  • При работе под uinput должно быть верно следующее: Необходимо запускать программу Python с root правами, чтобы она имела необходимые разрешения для работы с uinput . Первое требование для X -сервера означает, что запуск pynput через SSH обычно не работает. Чтобы обойти это, обязательно установите переменную окружения $DISPLAY :

$ DISPLAY=:0 python -c 'import pynput' 

При работе под Wayland эмулятор X-сервера Xwayland обычно работает, предоставляя ограниченную функциональность. При этом, модуль pynput будет получать входные события только от приложений, работающих под управлением этого эмулятора.

Ограничения платформы macOS.

Последние версии macOS ограничивают мониторинг клавиатуры из соображений безопасности. По этой причине одно из следующего должно быть истинным:

  • Процесс должен запускаться от имени root .
  • Приложение должно быть внесено в белый список в разделе «Разрешить доступ для вспомогательных устройств«. Обратите внимание, что для этого может потребоваться упаковка приложения, т.к. в противном случае, вся установка Python должна быть включена в белый список.
  • В версиях после Mojave , если скрипт запускается из терминала, то может потребоваться добавить в белый список также приложение терминала.

Обратите внимание, что это требование не относится к мониторингу мыши или trackpad .

Если нет недостающих разрешений, то все классы слушателей Listener имеют дополнительный атрибут IS_TRUSTED , который имеет значение True .

Ограничения платформы Windows.

В Windows, виртуальные события, отправленные другими процессами, могут не приниматься. Чтобы отправлять любые сгенерированные виртуальные события всем запущенным слушателям текущего процесса, модуль pynput принимает меры предосторожности.

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

Пример использования модуля pynput .

Мониторинг клавиатуры.

Подмодуль pynput.keyboard содержит классы для управления и мониторинга клавиатуры.

from pynput import keyboard # В этом блоке будет работать слушатель событий. with keyboard.Events() as events: for event in events: if event.key == keyboard.Key.esc: break else: print(f'Получено событие клавиатуры event>') 

Управление мышью.

Подмодуль pynput.mouse содержит классы для управления и мониторинга мыши.

from pynput.mouse import Button, Controller mouse = Controller() # Считывание положения указателя print(f'Текущее положение указателя: mouse.position>') # Установка положения указателя mouse.position = (10, 20) print(f'Указатель перемещен в позицию: mouse.position>') # Перемещение указателя относительно текущего положения mouse.move(5, -5) # Нажатие и отпускание левой кнопки мыши mouse.press(Button.left) mouse.release(Button.left) # Двойной клик - отличается от простого нажатия mouse.click(Button.left, 2) # Прокрутка страницы на два шага вниз mouse.scroll(0, 2) 
  • КРАТКИЙ ОБЗОР МАТЕРИАЛА.
  • Мониторинг и управление клавиатурой
  • Мониторинг за состоянием и управление мышью
  • Класс keyboard.Controller() модуля pynput
  • Класс keyboard.Listener() модуля pynput
  • Класс keyboard.Key модуля pynput
  • Класс keyboard.KeyCode() модуля pynput
  • Класс mouse.Controller() модуля pynput
  • Класс mouse.Listener() модуля pynput

Руководство по модулю клавиатуры Python

Python является одним из наиболее подходящих языков для автоматизации задач. Будь то повторяемый (этический) веб-скоб через некоторое время, запуск некоторых программ при запуске компьютера или автоматизацию отправки повседневных электронных писем, Python имеет много модулей, которые облегчают вашу жизнь.

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

В этом руководстве мы рассмотрим, как настроить и использовать модуль клавиатуры в Python.

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

Установка модуля клавиатуры

Версия Python, используемая в этом руководстве, равна 3.8. Однако модуль клавиатуры может работать как с Python 2.x, так и с Python 3.x.

Если вы используете Linnux, чтобы использовать эту библиотеку, вы должны установить ее от root. Если вы этого не сделаете, вы получите:

ImportError: You must be root to use this library on linux.

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

$ sudo pip3 install keyboard $ sudo python3 my_script.py

В Windows и macOS, поскольку привилегии работают совсем по-другому — вы можете установить его просто через pip и запустить сценарии:

$ pip install keyboard $ python my_script.py

Примечание: Для MacOS вам, возможно, придется разрешить терминалу или другим приложениям изменять состояние вашей машины, например, путем ввода текста. Также имейте в виду, что по состоянию на сентябрь 2021 года библиотека все еще находится в экспериментальном состоянии на MacOS.

Функция модуля клавиатуры

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

  • keyboard.write(message, [delay])- пишет сообщение с задержкой или без нее.
  • keyboard.wait(key) — блокирует программу до тех пор, пока не будет нажата клавиша. Ключ передается в виде строки («пробел», «esc» и т.д.)
  • keyboard.press(key)- нажимает клавишу и удерживается до вызова функции release(key)
  • keyboard.release(key)- выпускает ключ.
  • keyboard.send(key)- нажимает и отпускает клавишу.
  • keyboard.add_hotkey(hotkey, function)- создает hotkey, которая при нажатии выполняет function.
  • keyboard.record(key)- записывает активность клавиатуры до нажатия key.
  • keyboard.play(recorded_events, [speed_factor]) — воспроизводит события, записанные with keyboard.record(key) функция, с дополнительным speed_factor.

Тем не менее, мы рассмотрим все это. Вот быстрый пример:

>>> import keyboard >>> keyboard.write("Hello") >>> Hello

Приветственное сообщение появляется на экране в терминале, как будто вы его написали. Вы можете очень легко автоматизировать команду и создать для нее псевдоним горячей клавиши. Вот (грубый) пример выхода из REPL Python, написания команды curl:

>>> import keyboard >>> keyboard.write("exit()"); keyboard.send("enter"); keyboard.write("curl https://www.google.com"); keyboard.send("enter"); >>> exit() curl https://www.google.com $ curl https://www.google.com  

Функции write() и wait() клавиатуры

Команда write() записывает сообщение, как мы видели ранее, с необязательной задержкой при запуске. Если задержка не установлена, запись выполняется мгновенно. Это очень хорошо сочетается с функцией wait (), которая ожидает нажатия определенной клавиши.

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

Мы создадим бесконечный цикл True, чтобы проверить, нажата ли клавиша, и вы можете запустить сценарий в фоновом режиме:

import keyboard while True: keyboard.wait("1") keyboard.write("\n The key '1' was pressed!")

Примечание: Специальные символы не поддерживаются этой функцией, поэтому, если вы добавите, скажем, ! - вы получите исключение остановки.

Функции клавиши press() и release()

Поскольку сложно имитировать press () и release(), чтобы действия были видны, мы также увидим в действии record() и play() .

Функция press() нажимает клавишу и отпускает ее, когда вы вызываете release() на той же клавише.

>>> import keyboard >>> from time import sleep >>> keyboard.press("a") >>> sleep(1) >>> keyboard.release("a") >>> a

Тем не менее, вы можете удерживать некоторые специальные клавиши, такие как [SHIFT] или [CTRL] следующим образом:

>>> keyboard.press("shift") >>> keyboard.write("lowercase") >>> keyboard.release("shift") >>> LOWERCASE

Функции клавиатуры record() и play()

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

Функция record() принимает ключ запуска, до которого она записывает, и возвращает последовательность событий типа KeyboardEvent. Затем вы можете поместить эту последовательность событий в функцию play(), которая точно воспроизводит их, с дополнительным аргументом speed_factor. Он действует как множитель скорости исходных событий:

import keyboard recorded_events = keyboard.record("esc") keyboard.play(recorded_events)

Если мы напечатаем recorded_events, они будут выглядеть примерно так:

KeyboardEvent(w up), KeyboardEvent(o down), . ]

Функция клавиатуры send()

Функция send() включает в себя press () и release () вместе и используется для отдельных клавиш, в отличие от функции write(), которая используется для целых предложений:

import keyboard recorded_events = keyboard.record("s") keyboard.send("w") keyboard.send("a") keyboard.play(recorded_events)

После нажатия клавиши s воспроизводятся клавиши w и a.

Функция press() также может принимать комбинации нажатых клавиш. Вы можете отправить комбинацию "ctrl + shift + s", например, и должен появиться диалог для сохранения файла, если вы находитесь в приложении, которое поддерживает эту операцию:

import keyboard while True: keyboard.wait("s") keyboard.press("ctrl+shift+s") # Or for MacOS keyboard.press("command+shift+s)

Хотя это неправильный способ добавить горячие клавиши. Также вы можете использовать функцию add_hotkey().

Функция клавиатуры add_abreviation()

Функция add_abbreviation() является довольно изящной, так как она позволяет определять сокращения для длинных входных данных и заменяет сокращенные версии сохраненными полными версиями.

Например, подобно тому, как такие службы, как Google, сохраняют вашу электронную почту для большинства форм ввода, вы можете создать свою собственную аббревиатуру и запустить ее через [SPACE]:

>>> import keyboard >>> keyboard.add_abbreviation("@", "john@stackabuse.com")

Во время выполнения, если вы введете @, за которым следует [ПРОБЕЛ] - ввод в длинной форме заменит введенный @.

Функция клавиатуры add_hotkey()

Функция add_hotkey() принимает горячую клавишу, которую вы хотите сохранить, или комбинацию клавиш и функцию. Здесь легко передать анонимные лямбда-функции, хотя вы также можете добавить именованные функции.

Например, давайте добавим горячую клавишу для CTRL+j, которая запускает лямбда-функцию, регистрирующей это:

import keyboard keyboard.add_hotkey("ctrl+alt+j", lambda: print("ctrl+alt+j was pressed"))

Горячая клавиша ctrl + alt + p сохраняется, и при нажатии этой комбинации вы должны увидеть вывод лямбды.

Заключение

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

  • модульное программирование
  • phyton

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

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