該項目目前未維護。它適用於很多情況,我希望將來再次使用它,但使用它時您可能會遇到一些摩擦和有限的功能。
使用這個小型 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”)(如果已知)。