GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

boppreh

keyboard – WindowsとLinuxでグローバルキーボードイベントをフックしてシミュレート

投稿日:

WindowsとLinuxでグローバルキーボードイベントをフックしてシミュレートします。

キーボード

この小さなPythonライブラリを使用して、キーボードを完全に制御してください。 グローバルイベントをフックし、ホットキーを登録し、キープレスをシミュレートします。

特徴

  • すべてのキーボードのグローバルイベントフック (フォーカスに関係なくキーをキャプチャ)。
  • キーボードイベントを聞き送信します。
  • WindowsLinuxで動作ます (sudoが必要です)。実験的なOS Xのサポートがあります(感謝@glitchassassin!)。
  • 純粋なPython 、コンパイルされるCモジュールはありません。
  • 依存関係のゼロ 簡単にインストールして展開し、ファイルをコピーするだけです。
  • Python 2と3です。
  • コントロール可能なタイムアウトを備えた複雑なホットキーサポート(例えばctrl+shift+m, ctrl+space
  • 高レベルのAPI (例えば、 レコード再生add_abbreviation )を含みます。
  • 完全な国際化サポートCtrl+ç )を使用して、レイアウトに実際にあるキーをマップします。
  • 独立したスレッドで自動的にキャプチャされたイベントは、メインプログラムをブロックしません。
  • テスト済みで文書化されています。
  • アクセントになっているデッドキーを壊さないでください(私はあなたを見ています、pyHook)。
  • プロジェクトマウス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('@@', 'my.long.email@example.com')

# Block forever, like `while True`.
keyboard.wait()

既知の制限:

  • Windowsで生成されたイベントは、デバイスID( event.device == None )を報告しません。 #21
  • Linux上のメディアキーは名前なし(スキャンコードのみ)または全く表示されないことがあります。 #20
  • キー抑制/ブロックはWindowsでのみ利用可能です。 #22
  • Xに依存しないように、Linuxの部分はrawデバイスファイル( /dev/input/input* )を読み込みますが、これはrootになります。
  • いくつかのゲームのような他のアプリケーションは、すべてのキーイベントを飲み込むフックを登録することがあります。 この場合、 keyboardはイベントを報告できません。
  • このプログラムは自分自身を隠そうとするものではないので、キーロガーやオンラインゲームのボットには使わないでください。 責任を負う

API

目次

キーボード。 KEY_DOWN

= 'down'

キーボード。 KEY_UP

= 'up'

クラスのキーボード。 KeyboardEvent

KeyboardEvent デバイス

KeyboardEvent イベントタイプ

KeyboardEvent is_keypad

KeyboardEvent 修飾語

KeyboardEvent

KeyboardEvent scan_code

KeyboardEvent 時間

KeyboardEvent to_json (self、ensure_ascii = False)

[ソース]

キーボード。 all_modifiers

= {'alt', 'alt gr', 'ctrl', 'left alt', 'left ctrl', 'left shift', 'left windows', 'right alt', 'right ctrl', 'right shift', 'right windows', 'shift', 'windows'}

キーボード。 sided_modifiers

= {'alt', 'ctrl', 'shift', 'windows'}

キーボード。 is_modifier (key)

[ソース]

keyが検索キーまたは修飾キーの名前であればTrueを返します。

キーボード。 key_to_scan_codes (key、error_if_missing = True)

[ソース]

このキー(名前またはスキャンコード)に関連付けられたスキャンコードのリストを返します。

キーボード。 parse_hotkey (ホットキー)

[ソース]

解析された構造を表すネストされたタプルにユーザーが提供するホットキーを解析します。下位の値はスキャンコードのリストです。 生のスキャンコードも受け入れ、必要な数のネストでラップされます。

例:

parse_hotkey("alt+shift+a, alt+b, c")
#    Keys:    ^~^ ^~~~^ ^  ^~^ ^  ^
#    Steps:   ^~~~~~~~~~^  ^~~~^  ^

# ((alt_codes, shift_codes, a_codes), (alt_codes, b_codes), (c_codes,))

キーボード。 send (ホットキー、do_press = True、do_release = True)

[ソース]

指定されたホットキーのホットキーを実行する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 」を参照)。

キーボード。 リリース (ホットキー)

[ソース]

ホットキーを解放します( send参照)。

キーボード。 is_pressed (ホットキー)

[ソース]

キーが押されている場合はTrueを返します。

is_pressed(57) #-> True
is_pressed('space') #-> True
is_pressed('ctrl+space') #-> True

キーボード。 call_later (fn、args =()、delay = 0.001)

[ソース]

しばらく待ってから新しいスレッドで提供された関数を呼び出します。 現在の実行フローをブロックすることなく、システムにイベントを処理するための時間を与えるのに役立ちます。

キーボード。 フック (コールバック、抑制= False、on_remove = <ラムダ>)

[ソース]

使用可能なすべてのキーボードにグローバルリスナーをインストールし、キーが押されたり解放されるたびにcallbackを呼び出しcallback

コールバックに渡されるイベントは、 keyboard.KeyboardEvent型で、次の属性を持ちます。

  • name :文字のUnicode表現(例えば “&”)または記述(例えば “space”)。 名前は常に小文字です。
  • scan_code :物理キーを表す数字。例えば、55。
  • time :イベントが発生した時刻のタイムスタンプで、OSによって与えられた精度と同じです。

より簡単に開発できるように、指定されたコールバックを返します。

キーボード。 on_press (コールバック、抑制= False)

[ソース]

KEY_DOWNイベントごとにcallbackを呼び出しcallback 詳細については、 hook参照してください。

キーボード。 on_release (コールバック、抑制= False)

[ソース]

KEY_UPイベントごとにcallbackを呼び出しcallback 詳細については、 hook参照してください。

キーボード。 hook_key (key、c​​allback、suppress = False)

[ソース]

単一のキーのキーアップイベントとキーダウンイベントをフックします。 作成されたイベントハンドラを返します。 フックされたキーを削除するには、 unhook_key(key)またはunhook_key(handler)ます。

注:この機能はホットキーと状態を共有するので、 clear_all_hotkeysそれに影響します。

キーボード。 on_press_key (key、c​​allback、suppress = False)

[ソース]

指定されたキーに関連するKEY_DOWNイベントのcallbackを呼び出しcallback 詳細については、 hook参照してください。

キーボード。 on_release_key (key、c​​allback、suppress = False)

[ソース]

指定されたキーに関連するKEY_UPイベントのcallbackを呼び出しcallback 詳細については、 hook参照してください。

キーボード。 アンフック (削除)

[ソース]

コールバックまたはhook戻り値のいずれかによって、以前に追加されたフックを削除します。

キーボード。 unhook_all ()

[ソース]

ホットキー、略語、単語リスナー、 record ers、およびwaitを含む、使用中のすべてのキーボードフックを削除します。

キーボード。 block_key (key)

[ソース]

修飾子にかかわらず、指定されたキーのすべてのキーイベントを抑制します。

キーボード。 remap_key (src、dst)

[ソース]

キーsrcが押されたりsrcれたりするときはいつでも、修飾子にかかわらず、代わりにホットキーdst押すか解放します。

キーボード。 parse_hotkey_combinations (ホットキー)

[ソース]

ユーザー提供のホットキーを解析します。 parse_hotkeyとは異なり、各ステップが各キーの異なるスキャンコードのリストではなく、各ステップはそれらのスキャンコードのすべての可能な組み合わせのリストです。

キーボード。 add_hotkey (ホットキー、コールバック、args =()、suppress = False、timeout = 1、trigger_on_release = False)

[ソース]

ホットキーを押すたびにコールバックを呼び出します。 ホットキーは、 ctrl+shift+a, s形式でなければなりません。 これは、ユーザーがctrl、shift、および “a”を一度に保持し、リリースしてから “s”を押すとトリガされます。 リテラルカンマ、プラス、スペースを表すには、その名前( ‘カンマ’、 ‘プラス’、スペース)を使用します。

  • argsは、各呼び出しの間にコールバックに渡す引数のオプションリストです。
  • suppressは、成功したトリガーによってキーが他のプログラムに送信されないようにする必要があるかどうかを定義します。
  • timeoutは、キー押下間を通過できる秒数です。
  • trigger_on_release trueの場合、キー押下ではなく、キー解放時にコールバックが呼び出されます。

イベントハンドラ関数が返されます。 ホットキーを削除するには、 remove_hotkey(hotkey)またはremove_hotkey(handler)呼び出します。 ホットキーの状態がリセットされる前に

注記:ホットキーは、最後のキーが押されたときにアクティブになります。 注:コールバックは別のスレッドで非同期に実行されます。 コールバックを同期的に使用する方法の例については、 wait参照して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)

キーボード。 remove_hotkey (hotkey_or_callback)

[ソース]

以前に接続したホットキーを削除します。 add_hotkeyによって返された値で呼び出される必要があります。

キーボード。 unhook_all_hotkeys ()

[ソース]

略語、単語リスナー、 recordwaitを含む、使用中のキーボードホットキーをすべて削除します。

キーボード。 remap_hotkey (src、dst、suppress = True、trigger_on_release = False)

[ソース]

ホットキーsrcを押すたびに、それを抑止してdstを送信してください。

例:

remap('alt+w', 'ctrl+up')

キーボード。 stash_state ()

[ソース]

現在押されているすべてのスキャンコードのリストを作成し、それらを解放してリストを返します。 restore_staterestore_stateとのペアのrestore_modifiers

キーボード。 restore_state (scan_codes)

[ソース]

scan_codesのリストがあれば、これらのキーとこれらのキーだけが押されていることを保証します。 restore_modifiers代わりに、 stash_statestash_stateれます。

キーボード。 restore_modifiers (scan_codes)

[ソース]

restore_stateと同じですが、修飾キーのみを復元します。

キーボード。 write (text、delay = 0、restore_state_after = True、exact = None)

[ソース]

OSに人工的なキーボードイベントを送り、与えられたテキストの入力をシミュレートします。 キーボードで使用できない文字は、alt + codepointなどのOS固有の機能を使用する明示的なUnicode文字として入力されます。

テキストの整合性を保証するために、現在押されているキーはすべて、テキストが入力される前に解放され、後で修飾子が復元されます。

  • delayはキー押下の間に待機する秒数です。デフォルトはno delayです。
  • restore_state_afterを使用して、テキストが入力された後に押されたキーの状態を復元することができます。つまり、最初に解放されたキーを押します。 デフォルトはTrueです。
  • すべての文字を明示的なユニコード(例えば、alt + codepointまたは特別なイベント)として入力することはexact強制されます。 Noneの場合は、プラットフォーム固有の推奨値を使用します。

キーボード。 待機 (ホットキー=なし、抑止= False、トリガーオン=解放= False)

[ソース]

与えられたホットキーが押されるか、パラメータが与えられていなければ永遠にブロックされるまで、プログラムの実行をブロックします。

キーボード。 get_hotkey_name (names = None)

[ソース]

指定されたキー名からホットキーの文字列表現、または指定されていない場合は現在押されているキーを返します。 この関数:

  • 名前を正規化する。
  • “left”と “right”プレフィックスを削除します。
  • あいまいさを避けるために “+”キー名を “+”に置き換えます。
  • 最初に修飾キーを標準化された順序で入れます。
  • 残りのキーを並べ替えます。
  • 最後に、すべてを “+”で結合します。

例:

get_hotkey_name(['+', 'left ctrl', 'shift'])
# "ctrl+shift+plus"

キーボード。 read_event (suppress = False)

[ソース]

キーボードイベントが発生するまでブロックし、そのイベントを返します。

キーボード。 read_key (suppress = False)

[ソース]

キーボードイベントが発生するまでブロックし、そのイベントの名前または見つからない場合はそのスキャンコードを返します。

キーボード。 read_hotkey (suppress = True)

[ソース]

read_key()と似ていますが、ユーザがホットキー(または単一キー)を押して離すまでブロックし、押されたホットキーを表す文字列を返します。

例:

read_hotkey()
# "ctrl+shift+p"

キーボード。 get_typed_strings (イベント、allow_backspace = True)

[ソース]

一連のイベントが与えられた場合、どの文字列が入力されたかを推測しようとします。 文字列以外のキー(TabやEnterなど)を押すと、文字列が区切られます。 文字は、シフトとcapslockの状態に従って大文字に変換されます。 allow_backspaceがTrueの場合、バックスペースは最後に入力された文字を削除します。

この関数はジェネレータなので、イベントの無限ストリームを渡してリアルタイムで文字列に変換することができます。

この関数は単なるヒューリスティックであることに注意してください。 たとえば、Windowsはキーボードレイアウトなどのプロセスごとのキーボードの状態を保持しますが、この情報は私たちのフックでは利用できません。

get_type_strings(record()) #-> ['This is what', 'I recorded', '']

キーボード。 start_recording (recorded_events_queue =なし)

[ソース]

すべてのキーボードイベントをグローバル変数に記録するか、指定されたキューがあればそれを記録します。 イベントのキューとフックされた関数を返します。

stop_recording()するには、 stop_recording()またはunhook(hooked_function)を使用します。

キーボード。 stop_recording ()

[ソース]

イベントのグローバル記録を停止し、取得したイベントのリストを返します。

キーボード。 レコード (until = ‘エスケープ’、suppress = False、trigger_on_release = False)

[ソース]

ユーザーが指定されたホットキーを押すまで、すべてのキーボードからのすべてのキーボードイベントを記録します。 次に、 keyboard.KeyboardEvent型の、記録されたイベントのリストを返します。 play(events)とうまく組み合わせます。

注:これはブロック機能です。 注:キーボードフックとイベントの詳細については、フックを参照してください。

キーボード。 再生 (イベント、speed_factor = 1.0)

[ソース]

相対的な時間間隔を維持しながら、記録されたイベントのシーケンスを再生します。 speed_factorが<= 0の場合、アクションはOSが許す限り速く再生されます。 record()とのペアrecord()

注:現在のキーボードの状態は、最初にクリアされ、機能の最後に復元されます。

キーボード。 add_word_listener (単語、コールバック、トリガー= [‘スペース’]、match_suffix = False、タイムアウト= 2)

[ソース]

一連の文字が入力されるたび(例えば、「ペット」)にトリガーキー(スペースなど)が続くたびにコールバックを呼び出します。 修飾子(alt、ctrl、shiftなど)は無視されます。

  • 入力されたテキストと一致するword 例えば「ペット」。
  • callbackは、単語が入力されるたびに呼び出される引数のない関数です。
  • triggersとは、一致を確認するキーのリストです。 ユーザーが文字ではない(len> 1)キーを押すと、それまでの文字は破棄されます。 デフォルトでは、トリガーはspaceのみです。
  • match_suffixは、単語のmatch_suffixだけを単語全体ではなくチェックする必要があるかどうかを定義します。 たとえばtrueの場合、 ‘carpet’ + spaceと入力すると、 ‘pet’のリスナーがトリガーされます。 デフォルトはfalseで、単語全体がチェックされます。
  • timeoutは、現在の単語が破棄されるまでに入力された文字間の最大秒数です。 デフォルトは2秒です。

作成されたイベントハンドラを返します。 単語リスナーを削除するには、 remove_word_listener(word)またはremove_word_listener(handler)ます。

注:すべてのアクションはキーダウン時に実行されます。 キーアップイベントは無視されます。 注:単語一致では大文字と小文字が区別されます

キーボード。 remove_word_listener (word_or_handler)

[ソース]

以前に登録された単語リスナーを削除します。 登録中に使用された単語(正確な文字列)か、 add_abbreviation関数またはadd_abbreviation関数によって返されたイベントハンドラのadd_word_listenerかをadd_abbreviationます。

キーボード。 add_abbreviation (source_text、replacement_text、match_suffix = False、timeout = 2)

[ソース]

入力されたテキストを別のものに置き換えるホットキーを登録します。 例えば

add_abbreviation('tm', u'')

すべての “tm”の後にスペースがあり、スペースはスペースで囲まれています。 置換は、バックスペースイベントを送信することによって行われます。

  • match_suffixは、単語のmatch_suffixだけを単語全体ではなくチェックする必要があるかどうかを定義します。 たとえばtrueの場合、 ‘carpet’ + spaceと入力すると、 ‘pet’のリスナーがトリガーされます。 デフォルトはfalseで、単語全体がチェックされます。
  • timeoutは、現在の単語が破棄されるまでに入力された文字間の最大秒数です。 デフォルトは2秒です。

詳細については、 add_word_listener参照してください。







-boppreh
-, , , , , , ,

執筆者:

関連記事

関連記事はありませんでした