该项目目前未维护。它适用于很多情况,我希望将来再次使用它,但使用它时您可能会遇到一些摩擦和有限的功能。
使用这个小型 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
服务器或 Raspberry PI,服务器将不会检测您的按键事件。 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'
[来源]
如果key
是扫描码或修饰键的名称,则返回 True。
[来源]
返回与此键关联的扫描代码列表(名称或扫描代码)。
[来源]
将用户提供的热键解析为表示解析结构的嵌套元组,底部值为扫描代码列表。还接受原始扫描代码,然后将其包装在所需数量的嵌套中。
例子:
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,则发送新闻事件。默认为 True。do_release
如果 true 则发送释放事件。默认为 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
:字符(例如“&”)或描述(例如“空格”)的 Unicode 表示形式。该名称始终为小写。scan_code
:代表物理密钥的数字,例如 55。time
:事件发生时间的时间戳,其精度与操作系统给出的精度相同。返回给定的回调以便于开发。
[来源]
为每个 KEY_DOWN 事件调用callback
。详细信息请参见hook
。
[来源]
为每个 KEY_UP 事件调用callback
。详细信息请参见hook
。
[来源]
挂钩单个按键的按键按下和按键事件。返回创建的事件处理程序。要删除挂钩的键,请使用unhook_key(key)
或unhook_key(handler)
。
注意:此函数与热键共享状态,因此clear_all_hotkeys
也会影响它。
[来源]
调用与给定键相关的 KEY_DOWN 事件的callback
。详细信息请参见hook
。
[来源]
调用与给定键相关的 KEY_UP 事件的callback
。详细信息请参见hook
。
[来源]
通过回调或hook
的返回值删除先前添加的钩子。
[来源]
删除所有正在使用的键盘挂钩,包括热键、缩写、单词监听器、 record
器和wait
。
[来源]
抑制给定键的所有键事件,无论修饰符如何。
[来源]
每当按下或释放键src
时,无论修饰符如何,都按下或释放热键dst
。
[来源]
解析用户提供的热键。与parse_hotkey
不同的是,每个步骤不是每个键的不同扫描代码的列表,而是每个步骤都是这些扫描代码的所有可能组合的列表。
[来源]
每次按下热键时都会调用回调。热键的格式必须为ctrl+shift+a, s
。当用户同时按住 ctrl、shift 和“a”,松开,然后按“s”时,会触发此操作。要表示文字逗号、加号和空格,请使用它们的名称(“comma”、“plus”、“space”)。
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+codepoint)作为显式 unicode 字符键入。
为了确保文本完整性,在键入文本之前释放当前按下的所有键,然后恢复修饰符。
delay
是按键之间等待的秒数,默认为无延迟。restore_state_after
可用于在键入文本后恢复按下的按键的状态,即按下开始时释放的按键。默认为 True。exact
强制将所有字符输入为显式 unicode(例如 alt+codepoint 或特殊事件)。如果无,则使用特定于平台的建议值。 [来源]
阻止程序执行,直到按下给定的热键为止,或者如果没有给出参数,则永远阻止。
[来源]
从给定的键名称返回热键的字符串表示形式,如果未给出,则返回当前按下的键。这个功能:
例子:
get_hotkey_name ([ '+' , 'left ctrl' , 'shift' ])
# "ctrl+shift+plus"
[来源]
阻塞直到发生键盘事件,然后返回该事件。
[来源]
阻塞直到键盘事件发生,然后返回该事件的名称,或者如果缺少,则返回其扫描代码。
[来源]
与read_key()
类似,但会阻塞,直到用户按下并释放热键(或单个键),然后返回表示按下的热键的字符串。
例子:
read_hotkey ()
# "ctrl+shift+p"
[来源]
给定一系列事件,尝试推断键入的字符串。当按下非文本键(例如 Tab 或 Enter)时,字符串被分隔。根据 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()
配合良好。
注意:当前键盘状态在函数开始时被清除,并在函数结束时恢复。
[来源]
每次键入字符序列(例如“pet”)并后跟触发键(例如空格)时都会调用回调。修饰符(例如 alt、ctrl、shift)将被忽略。
word
要匹配的键入文本。例如“宠物”。callback
是一个无参数函数,每次键入单词时都会调用它。triggers
是将导致检查匹配的键列表。如果用户按下某个不是字符(len>1)且不在触发器中的键,则到目前为止的字符将被丢弃。默认情况下,触发器仅为space
。match_suffix
定义是否还应该检查单词的结尾而不是仅检查整个单词。例如,如果为 true,则输入“地毯”+空格将触发“宠物”的侦听器。默认为 false,仅检查整个单词。timeout
是丢弃当前单词之前键入的字符之间的最大秒数。默认为 2 秒。返回创建的事件处理程序。要删除单词侦听器,请使用remove_word_listener(word)
或remove_word_listener(handler)
。
注意:所有操作均在按下按键时执行。按键事件被忽略。注意:单词匹配区分大小写。
[来源]
删除先前注册的单词侦听器。接受注册期间使用的单词(精确字符串)或add_word_listener
或add_abbreviation
函数返回的事件处理程序。
[来源]
注册一个热键,用另一个键入的文本替换一个键入的文本。例如
add_abbreviation ( 'tm' , u'™' )
将每个“tm”后面的空格替换为 ™ 符号(并且没有空格)。替换是通过发送退格事件来完成的。
match_suffix
定义是否还应该检查单词的结尾而不是仅检查整个单词。例如,如果为 true,则输入“地毯”+空格将触发“宠物”的侦听器。默认为 false,仅检查整个单词。timeout
是丢弃当前单词之前键入的字符之间的最大秒数。默认为 2 秒。有关更多详细信息,请参阅add_word_listener
。
[来源]
给定一个键名(例如“LEFT CONTROL”),清理字符串并转换为规范表示(例如“left ctrl”)(如果已知)。