このプロジェクトは現在メンテナンスされていません。多くの場合に機能するので、将来的にはまた使いたいと思っていますが、使用するといくつかの摩擦や機能の制限に遭遇する可能性があります。
この小さな 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 に 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'
[ソース]
key
スキャン コードまたは修飾キーの名前の場合、True を返します。
[ソース]
このキーに関連付けられたスキャン コード (名前またはスキャン コード) のリストを返します。
[ソース]
ユーザーが指定したホットキーを解析して、解析された構造を表すネストされたタプルにします。その下位の値はスキャン コードのリストです。生のスキャン コードも受け入れ、必要な数のネストでラップされます。
例:
parse_hotkey ( "alt+shift+a, alt+b, c" )
# Keys: ^~^ ^~~~^ ^ ^~^ ^ ^
# Steps: ^~~~~~~~~~^ ^~~~^ ^
# ((alt_codes, shift_codes, a_codes), (alt_codes, b_codes), (c_codes,))
[ソース]
指定されたホットキーホットキーを実行する OS イベントを送信します。
hotkey
、スキャン コード (例: スペースの 57)、単一キー (例: 「スペース」)、または複数キー、複数ステップのホットキー (例: 「alt+F4、Enter」) のいずれかです。do_press
true の場合、press イベントが送信されます。デフォルトは 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
: イベントが発生した時刻のタイムスタンプ。OS によって与えられる精度と同じです。開発を容易にするために、指定されたコールバックを返します。
[ソース]
すべての 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_code のリストを指定すると、これらのキーだけが押されるようになります。 stash_state
とよく組み合わせられ、 restore_modifiers
の代わりになります。
[ソース]
restore_state
と似ていますが、修飾キーのみを復元します。
[ソース]
人為的なキーボード イベントを OS に送信し、指定されたテキストの入力をシミュレートします。キーボードで使用できない文字は、alt+コードポイントなどの OS 固有の機能を使用して明示的な Unicode 文字として入力されます。
テキストの整合性を確保するために、テキストを入力する前に現在押されているすべてのキーが放され、その後修飾子が復元されます。
delay
キーを押すまでに待機する秒数で、デフォルトでは遅延なしです。restore_state_after
使用すると、テキストを入力した後、つまり最初に放したキーを押した後に押されたキーの状態を復元できます。デフォルトは True です。exact
、すべての文字を明示的な Unicode として強制的に入力します (例: alt+コードポイントまたは特殊イベント)。なしの場合、プラットフォーム固有の推奨値が使用されます。 [ソース]
指定されたホットキーが押されるまでプログラムの実行をブロックします。パラメータを指定しない場合は永久にブロックします。
[ソース]
指定されたキー名からホットキーの文字列表現を返します。指定されていない場合は現在押されているキーを返します。この機能:
例:
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 の場合、アクションは OS が許可する速度で再生されます。 record()
とうまく組み合わせます。
注: 現在のキーボードの状態は関数の開始時にクリアされ、関数の終了時に復元されます。
[ソース]
一連の文字 (「pet」など) が入力され、その後にトリガー キー (スペースなど) が続くたびにコールバックを呼び出します。修飾子 (alt、ctrl、shift など) は無視されます。
word
照合する入力されたテキスト。たとえば「ペット」。callback
、単語が入力されるたびに呼び出される引数のない関数です。triggers
、一致をチェックするキーのリストです。ユーザーが文字 (len>1) ではなく、トリガー内にないキーを押すと、それまでの文字は破棄されます。デフォルトでは、トリガーはspace
のみです。match_suffix
単語全体だけでなく単語の末尾もチェックするかどうかを定義します。たとえば、true の場合、「carpet」+スペースを入力すると、「pet」のリスナーがトリガーされます。デフォルトは false で、単語全体のみがチェックされます。timeout
現在の単語が破棄されるまでの、入力された文字間の最大秒数です。デフォルトは 2 秒です。作成されたイベント ハンドラーを返します。単語リスナーを削除するには、 remove_word_listener(word)
またはremove_word_listener(handler)
を使用します。
注: すべてのアクションはキーを押すと実行されます。キーアップイベントは無視されます。注: 単語の一致では大文字と小文字が区別されます。
[ソース]
以前に登録した単語リスナーを削除します。登録中に使用された単語 (正確な文字列)、またはadd_word_listener
関数またはadd_abbreviation
関数によって返されたイベント ハンドラーのいずれかを受け入れます。
[ソース]
入力されたテキストを別のテキストに置き換えるホットキーを登録します。例えば
add_abbreviation ( 'tm' , u'™' )
スペースが続くすべての「tm」を ™ 記号 (スペースは含まない) に置き換えます。置換はバックスペース イベントを送信することによって行われます。
match_suffix
単語全体だけでなく単語の末尾もチェックするかどうかを定義します。たとえば、true の場合、「carpet」+スペースを入力すると、「pet」のリスナーがトリガーされます。デフォルトは false で、単語全体のみがチェックされます。timeout
現在の単語が破棄されるまでの、入力された文字間の最大秒数です。デフォルトは 2 秒です。詳細については、 add_word_listener
を参照してください。
[ソース]
キー名 (例: 「LEFT CONTROL」) を指定すると、文字列をクリーンアップし、正規表現 (例: 「left ctrl」) がわかっている場合はその表現に変換します。