「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python でキーボード イベントをプログラム的にシミュレートするにはどうすればよいですか?

Python でキーボード イベントをプログラム的にシミュレートするにはどうすればよいですか?

2024 年 11 月 8 日に公開
ブラウズ:615

How Can I Programmatically Simulate Keyboard Events in Python?

Python を使用してキーボード イベントを生成する方法

Python には、キーボード イベントをシミュレートするさまざまな手法が用意されており、コンピューターのキーボード操作をプログラムで操作できるようになります。 .

キーストロークのシミュレート

直接的なクロスプラットフォームのアプローチの場合は、Windows との対話を可能にする ctypes ライブラリの使用を検討してください。 API:

  1. 必要なライブラリのインポート: ctypeswintypes、および time をインポートします。
  2. User32 DLL をロードします: Windows API User32 DLL にアクセスし、入力タイプとキー イベントの定数を定義します。
  3. 入力構造を定義します: マウスの構造を定義します。 、キーボード、ハードウェア入力。
  4. 入力オブジェクトの作成: 必要なキーボードの押下または放しを表す INPUT オブジェクトを作成します。
  5. ]入力の送信: user32.SendInput を使用して、入力オブジェクトをコンピューターに送信し、キー イベントをシミュレートします。

例:

]
import ctypes
from ctypes import wintypes
import time

user32 = ctypes.WinDLL('user32', use_last_error=True)

VK_A = 0x41  # Virtual key code for 'A'
KEYEVENTF_KEYUP = 0x0002  # Key event flag for key release

class KEYBDINPUT(ctypes.Structure):
    _fields_ = (("wVk", wintypes.WORD),
                ("wScan", wintypes.WORD),
                ("dwFlags", wintypes.DWORD),
                ("time", wintypes.DWORD),
                ("dwExtraInfo", wintypes.ULONG_PTR))

def press_key(key_code):
    key_input = KEYBDINPUT(wVk=key_code)
    user32.SendInput(1, ctypes.byref(key_input), ctypes.sizeof(key_input))

def release_key(key_code):
    key_input = KEYBDINPUT(wVk=key_code, dwFlags=KEYEVENTF_KEYUP)
    user32.SendInput(1, ctypes.byref(key_input), ctypes.sizeof(key_input))

# Press and release the 'A' key
press_key(VK_A)
time.sleep(1)
release_key(VK_A)

追加メモ:

  • さまざまなキーをシミュレートするには、MSDN の 仮想キー コード ドキュメントを参照してください。
  • この手法は、アクティブなウィンドウ入力を受け入れない可能性のあるバックグラウンド プロセスであっても、システム全体でイベントをシミュレートすることに重点を置いています。
  • 特定の要件に応じて、他のオプションの代替ライブラリとプラットフォームを調べてください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3