Этот проект в настоящее время не поддерживается. Он работает во многих случаях, и я хотел бы использовать его снова в будущем, но при его использовании вы можете столкнуться с некоторыми трудностями и ограниченными возможностями.
Получите полный контроль над своей клавиатурой с помощью этой небольшой библиотеки Python. Перехватывайте глобальные события, регистрируйте горячие клавиши, имитируйте нажатия клавиш и многое другое.
ctrl+shift+m, ctrl+space
) с управляемым тайм-аутом.Ctrl+ç
).pip install mouse
). Установите пакет PyPI:
pip install keyboard
или клонируйте репозиторий (установка не требуется, достаточно исходных файлов):
git clone https://github.com/boppreh/keyboard
или загрузите и распакуйте zip-архив в папку вашего проекта.
Затем проверьте документацию по API ниже, чтобы узнать, какие функции доступны.
Использовать как библиотеку:
import keyboard
keyboard . press_and_release ( 'shift+s, space' )
keyboard . write ( 'The quick brown fox jumps over the lazy dog.' )
keyboard . add_hotkey ( 'ctrl+shift+a' , print , args = ( 'triggered' , 'hotkey' ))
# Press PAGE UP then PAGE DOWN to type "foobar".
keyboard . add_hotkey ( 'page up, page down' , lambda : keyboard . write ( 'foobar' ))
# Blocks until you press esc.
keyboard . wait ( 'esc' )
# Record events until 'esc' is pressed.
recorded = keyboard . record ( until = 'esc' )
# Then replay back at three times the speed.
keyboard . play ( recorded , speed_factor = 3 )
# Type @@ then press space to replace with abbreviation.
keyboard . add_abbreviation ( '@@' , '[email protected]' )
# Block forever, like `while True`.
keyboard . wait ()
Использовать как отдельный модуль:
# Save JSON events to a file until interrupted:
python -m keyboard > events.txt
cat events.txt
# {"event_type": "down", "scan_code": 25, "name": "p", "time": 1622447562.2994788, "is_keypad": false}
# {"event_type": "up", "scan_code": 25, "name": "p", "time": 1622447562.431007, "is_keypad": false}
# ...
# Replay events
python -m keyboard < events.txt
event.device == None
). #21/dev/input/input*
), но для этого требуется root.keyboard
не сможет сообщать о событиях.keyboard
через SSH, сервер не обнаружит ваши ключевые события. import keyboard
keyboard . add_hotkey ( 'space' , lambda : print ( 'space was pressed!' ))
# If the program finishes, the hotkey is not in effect anymore.
# Don't do this! This will use 100% of your CPU.
#while True: pass
# Use this instead
keyboard . wait ()
# or this
import time
while True :
time . sleep ( 1000000 )
import keyboard
# Don't do this! This will use 100% of your CPU until you press the key.
#
#while not keyboard.is_pressed('space'):
# continue
#print('space was pressed, continuing...')
# Do this instead
keyboard . wait ( 'space' )
print ( 'space was pressed, continuing...' )
import keyboard
# Don't do this!
#
#while True:
# if keyboard.is_pressed('space'):
# print('space was pressed!')
#
# This will use 100% of your CPU and print the message many times.
# Do this instead
while True :
keyboard . wait ( 'space' )
print ( 'space was pressed! Waiting on it again...' )
# or this
keyboard . add_hotkey ( 'space' , lambda : print ( 'space was pressed!' ))
keyboard . wait ()
import keyboard
# Don't do this! This will call `print('space')` immediately then fail when the key is actually pressed.
#keyboard.add_hotkey('space', print('space was pressed'))
# Do this instead
keyboard . add_hotkey ( 'space' , lambda : print ( 'space was pressed' ))
# or this
def on_space ():
print ( 'space was pressed' )
keyboard . add_hotkey ( 'space' , on_space )
# or this
while True :
# Wait for the next event.
event = keyboard . read_event ()
if event . event_type == keyboard . KEY_DOWN and event . name == 'space' :
print ( 'space was pressed' )
# Don't do this! The `keyboard` module is meant for global events, even when your program is not in focus.
#import keyboard
#print('Press any key to continue...')
#keyboard.get_event()
# Do this instead
input ( 'Press enter to continue...' )
# Or one of the suggestions from here
# https://stackoverflow.com/questions/983354/how-to-make-a-script-wait-for-a-pressed-key
press_and_release
)unblock_key
, unhook_key
, unremap_key
)register_hotkey
)clear_hotkey
, unregister_hotkey
, unremap_hotkey
)clear_all_hotkeys
, remove_all_hotkeys
, unregister_all_hotkeys
)replay
)register_word_listener
)remove_abbreviation
)register_abbreviation
) = 'down'
= 'up'
[источник]
= { 'alt' , 'alt gr' , 'ctrl' , 'left alt' , 'left ctrl' , 'left shift' , 'left windows' , 'right alt' , 'right ctrl' , 'right shift' , 'right windows' , 'shift' , 'windows' }
= { 'alt' , 'ctrl' , 'shift' , 'windows' }
= '0.13.5'
[источник]
Возвращает значение True, если key
представляет собой скан-код или имя клавиши-модификатора.
[источник]
Возвращает список кодов сканирования, связанных с этим ключом (имя или код сканирования).
[источник]
Разбирает предоставленную пользователем горячую клавишу на вложенные кортежи, представляющие анализируемую структуру, причем нижние значения представляют собой списки кодов сканирования. Также принимает необработанные коды сканирования, которые затем упаковываются в необходимое количество вложений.
Пример:
parse_hotkey ( "alt+shift+a, alt+b, c" )
# Keys: ^~^ ^~~~^ ^ ^~^ ^ ^
# Steps: ^~~~~~~~~~^ ^~~~^ ^
# ((alt_codes, shift_codes, a_codes), (alt_codes, b_codes), (c_codes,))
[источник]
Отправляет события ОС, которые выполняют данную горячую клавишу.
hotkey
может представлять собой код сканирования (например, 57 для пробела), одну клавишу (например, «пробел») или многоклавишную, многошаговую горячую клавишу (например, «alt+F4, ввод»).do_press
если true, то события нажатия отправляются. По умолчанию установлено значение «Истина».do_release
если true, то события выпуска отправляются. По умолчанию установлено значение «Истина». send ( 57 )
send ( 'ctrl+alt+del' )
send ( 'alt+F4, enter' )
send ( 'shift+s' )
Примечание. Клавиши отпускаются в порядке, обратном их нажатию.
[источник]
Нажимает и удерживает горячую клавишу (см. send
»).
[источник]
Отпускает горячую клавишу (см. send
).
[источник]
Возвращает True, если клавиша нажата.
is_pressed ( 57 ) #-> True
is_pressed ( 'space' ) #-> True
is_pressed ( 'ctrl+space' ) #-> True
[источник]
Вызывает предоставленную функцию в новом потоке после некоторого ожидания. Полезно, чтобы дать системе некоторое время на обработку события, не блокируя текущий поток выполнения.
[источник]
Устанавливает глобальный прослушиватель на все доступные клавиатуры, вызывая callback
каждый раз, когда клавиша нажимается или отпускается.
Событие, передаваемое обратному вызову, имеет тип keyboard.KeyboardEvent
со следующими атрибутами:
name
: представление символа в Юникоде (например, «&») или описания (например, «пробел»). Имя всегда пишется строчными буквами.scan_code
: число, представляющее физический ключ, например 55.time
: временная метка времени, когда произошло событие, с точностью, заданной ОС.Возвращает заданный обратный вызов для упрощения разработки.
[источник]
Вызывает callback
для каждого события KEY_DOWN. Подробности см. hook
.
[источник]
Вызывает callback
для каждого события KEY_UP. Подробности см. hook
.
[источник]
Перехватывает события нажатия и нажатия клавиш для одной клавиши. Возвращает созданный обработчик событий. Чтобы удалить подключенный ключ, используйте unhook_key(key)
или unhook_key(handler)
.
Примечание. Эта функция разделяет состояние с горячими клавишами, поэтому clear_all_hotkeys
также влияет на нее.
[источник]
Вызывает callback
для события KEY_DOWN, связанного с данным ключом. Подробности см. hook
.
[источник]
Вызывает callback
для события KEY_UP, связанного с данным ключом. Подробности см. hook
.
[источник]
Удаляет ранее добавленный перехватчик либо посредством обратного вызова, либо по возвращаемому значению hook
.
[источник]
Удаляет все используемые клавиатурные хуки, включая горячие клавиши, сокращения, прослушиватели слов, устройства record
и wait
.
[источник]
Подавляет все ключевые события данной клавиши, независимо от модификаторов.
[источник]
Всякий раз, когда клавиша src
нажата или отпущена, независимо от модификаторов, вместо этого нажмите или отпустите горячую клавишу dst
.
[источник]
Анализирует предоставленную пользователем горячую клавишу. В отличие от parse_hotkey
, каждый шаг представляет собой не список различных кодов сканирования для каждой клавиши, а список всех возможных комбинаций этих кодов сканирования.
[источник]
Вызывает обратный вызов каждый раз при нажатии горячей клавиши. Горячая клавиша должна иметь формат ctrl+shift+a, s
. Это сработает, когда пользователь одновременно удерживает клавиши Ctrl, Shift и «A», отпускает их, а затем нажимает «s». Для обозначения буквальных запятых, плюсов и пробелов используйте их имена («запятая», «плюс», «пробел»).
args
— это необязательный список аргументов, которые передаются обратному вызову во время каждого вызова.suppress
определяет, должны ли успешные триггеры блокировать отправку ключей в другие программы.timeout
— это количество секунд, которое может пройти между нажатиями клавиш.trigger_on_release
, если true, обратный вызов вызывается при отпускании клавиши, а не при ее нажатии. Возвращается функция обработчика событий. Чтобы удалить горячую клавишу, вызовите remove_hotkey(hotkey)
или remove_hotkey(handler)
. прежде чем состояние горячей клавиши будет сброшено.
Примечание: горячие клавиши активируются при нажатии последней клавиши, а не отпускаются. Примечание: обратный вызов выполняется в отдельном потоке асинхронно. Пример синхронного использования обратного вызова см. в разделе wait
.
Примеры:
# Different but equivalent ways to listen for a spacebar key press.
add_hotkey ( ' ' , print , args = [ 'space was pressed' ])
add_hotkey ( 'space' , print , args = [ 'space was pressed' ])
add_hotkey ( 'Space' , print , args = [ 'space was pressed' ])
# Here 57 represents the keyboard code for spacebar; so you will be
# pressing 'spacebar', not '57' to activate the print function.
add_hotkey ( 57 , print , args = [ 'space was pressed' ])
add_hotkey ( 'ctrl+q' , quit )
add_hotkey ( 'ctrl+alt+enter, space' , some_callback )
[источник]
Удаляет ранее подключенную горячую клавишу. Должен вызываться со значением, возвращаемым add_hotkey
.
[источник]
Удаляет все используемые горячие клавиши клавиатуры, включая сокращения, прослушиватели слов, устройства record
и wait
.
[источник]
Всякий раз, когда нажимается горячая клавиша src
, подавляйте ее и вместо этого отправляйте dst
.
Пример:
remap ( 'alt+w' , 'ctrl+up' )
[источник]
Создает список всех нажатых в данный момент скан-кодов, отпускает их и возвращает список. Хорошо сочетается с restore_state
и restore_modifiers
.
[источник]
Наличие списка scan_codes гарантирует, что эти клавиши и только эти клавиши будут нажаты. Хорошо сочетается с stash_state
, альтернативой restore_modifiers
.
[источник]
Аналогично restore_state
, но восстанавливает только клавиши-модификаторы.
[источник]
Отправляет искусственные события клавиатуры в ОС, имитируя ввод заданного текста. Символы, недоступные на клавиатуре, вводятся как явные символы Юникода с использованием функций, специфичных для ОС, например alt+кодовая точка.
Чтобы обеспечить целостность текста, все нажатые в данный момент клавиши отпускаются перед вводом текста, а модификаторы после этого восстанавливаются.
delay
— это количество секунд ожидания между нажатиями клавиш, по умолчанию задержка отсутствует.restore_state_after
можно использовать для восстановления состояния нажатых клавиш после набора текста, т.е. нажатия клавиш, которые были отпущены в начале. По умолчанию установлено значение «Истина».exact
принудительно вводят все символы как явный юникод (например, alt+codepoint или специальные события). Если нет, используется предлагаемое значение, зависящее от платформы. [источник]
Блокирует выполнение программы до тех пор, пока не будет нажата данная горячая клавиша, или, если не заданы параметры, блокируется навсегда.
[источник]
Возвращает строковое представление горячей клавиши из заданных имен клавиш или нажатых в данный момент клавиш, если они не указаны. Эта функция:
Пример:
get_hotkey_name ([ '+' , 'left ctrl' , 'shift' ])
# "ctrl+shift+plus"
[источник]
Блокируется до тех пор, пока не произойдет событие клавиатуры, а затем возвращает это событие.
[источник]
Блокируется до тех пор, пока не произойдет событие клавиатуры, а затем возвращает имя этого события или, если оно отсутствует, его код сканирования.
[источник]
Аналогично read_key()
, но блокируется до тех пор, пока пользователь не нажмет и не отпустит горячую клавишу (или одну клавишу), а затем возвращает строку, представляющую нажатую горячую клавишу.
Пример:
read_hotkey ()
# "ctrl+shift+p"
[источник]
Учитывая последовательность событий, пытается определить, какие строки были напечатаны. Строки разделяются при нажатии нетекстовой клавиши (например, табуляции или ввода). Символы преобразуются в верхний регистр в соответствии со статусом Shift и Capslock. Если allow_backspace
имеет значение True, обратные пробелы удаляют последний введенный символ.
Эта функция является генератором, поэтому вы можете передавать бесконечный поток событий и преобразовывать их в строки в реальном времени.
Обратите внимание, что эти функции являются всего лишь эвристикой. Например, Windows сохраняет состояние клавиатуры для каждого процесса, такое как раскладка клавиатуры, и эта информация недоступна для наших перехватчиков.
get_type_strings ( record ()) #-> ['This is what', 'I recorded', '']
[источник]
Начинает запись всех событий клавиатуры в глобальную переменную или в заданную очередь, если таковая имеется. Возвращает очередь событий и подключенную функцию.
Используйте stop_recording()
или unhook(hooked_function)
чтобы остановить.
[источник]
Останавливает глобальную запись событий и возвращает список захваченных событий.
[источник]
Записывает все события клавиатуры со всех клавиатур, пока пользователь не нажмет данную горячую клавишу. Затем возвращает список записанных событий типа keyboard.KeyboardEvent
. Хорошо сочетается с play(events)
.
Примечание: это функция блокировки. Примечание. Более подробную информацию о перехвате клавиатуры и событиях см. hook
.
[источник]
Воспроизводит последовательность записанных событий с сохранением относительных интервалов времени. Если Speed_factor <= 0, то действия воспроизводятся так быстро, как позволяет ОС. Хорошо сочетается с record()
.
Примечание: текущее состояние клавиатуры очищается в начале и восстанавливается в конце функции.
[источник]
Вызывает обратный вызов каждый раз, когда набирается последовательность символов (например, «питомец»), за которой следует клавиша-триггер (например, пробел). Модификаторы (например, Alt, Ctrl, Shift) игнорируются.
word
набранный текст, который нужно сопоставить. Например, «домашнее животное».callback
— это функция без аргументов, которая вызывается каждый раз при вводе слова.triggers
— это список ключей, которые будут проверять совпадение. Если пользователь нажмет какую-либо клавишу, которая не является символом (len>1) и не входит в триггеры, символы на данный момент будут отброшены. По умолчанию триггером является только space
.match_suffix
определяет, следует ли проверять окончания слов, а не только целые слова. Например, если это правда, ввод «ковер» + пробел вызовет прослушивание «домашнего животного». По умолчанию false, проверяются только целые слова.timeout
— это максимальное количество секунд между вводом символов, прежде чем текущее слово будет отброшено. По умолчанию 2 секунды. Возвращает созданный обработчик событий. Чтобы удалить прослушиватель слов, используйте remove_word_listener(word)
или remove_word_listener(handler)
.
Примечание: все действия выполняются при нажатии клавиши. События нажатия клавиш игнорируются. Примечание: совпадения слов чувствительны к регистру .
[источник]
Удаляет ранее зарегистрированный прослушиватель слов. Принимает либо слово, использованное во время регистрации (точная строка), либо обработчик событий, возвращаемый функциями add_word_listener
или add_abbreviation
.
[источник]
Регистрирует горячую клавишу, которая заменяет один набранный текст другим. Например
add_abbreviation ( 'tm' , u'™' )
Заменяет каждое слово «tm», за которым следует пробел, на символ ™ (без пробела). Замена осуществляется путем отправки событий обратного пространства.
match_suffix
определяет, следует ли проверять окончания слов, а не только целые слова. Например, если это правда, ввод «ковер» + пробел вызовет прослушивание «домашнего животного». По умолчанию false, проверяются только целые слова.timeout
— это максимальное количество секунд между вводом символов, прежде чем текущее слово будет отброшено. По умолчанию 2 секунды. Для получения более подробной информации см. add_word_listener
.
[источник]
Учитывая имя ключа (например, «ЛЕВЫЙ КОНТРОЛЬ»), очистите строку и преобразуйте ее в каноническое представление (например, «левый Ctrl»), если оно известно.