ctypes を使用して Python でキーボード イベントをシミュレートするにはどうすればよいですか?

DDD
リリース: 2024-11-08 07:31:01
オリジナル
617 人が閲覧しました

How can you simulate keyboard events in Python using ctypes?

ctypes を使用したキーボード イベントのシミュレーション

はじめに

目標は、Python プログラムを作成することですコンピュータ上のキーボード イベントをシミュレートし、システムが実際のキーストロークとして認識できるようにします。この記事では、ctypes ライブラリを使用したソリューションについて説明します。

ctypes アプローチ

ctypes は、Python で Windows API 関数と対話する方法を提供します。キーボード イベントをシミュレートするには、「user32」 DLL の特定の関数を利用します。

  • SendInput(nInputs, pInputs, cbSize): 複数の入力イベントをシステムに送信します。
  • MapVirtualKeyExW(wVk, uMapType, dwhkl): 仮想キー コードをスキャン コードに変換し、その逆も行います。

カスタム データ構造

キーボード入力を表すために、次のように定義します。ネイティブ ctype と一致する Python のカスタム データ構造構造体:

  • INPUT: キーボード、マウス、ハードウェアなど、さまざまなタイプの入力を保持できる共用体。
  • KEYBOARDINPUT : キーボード入力を表します。

キーの押し方と放し方

キーを押したり放したりするには、適切な INPUT 構造体を作成して送信する関数を定義します。

  • PressKey(hexKeyCode): とキーを押すための INPUT 構造体を送信します。
  • ReleaseKey(hexKeyCode): キーを解放するための INPUT 構造体を作成して送信します。

Alt -Tab の例

これらの関数の使用法を示すには、次のようにします。 Alt-Tab を 2 秒間押し続けることをシミュレートする例を提供します。

<code class="python">import ctypes
from ctypes import wintypes
import time

VK_MENU = 0x12
VK_TAB  = 0x09

def PressKey(hexKeyCode):
    x = INPUT(type=INPUT_KEYBOARD,
              ki=KEYBDINPUT(wVk=hexKeyCode))
    ctypes.windll.user32.SendInput(1, ctypes.byref(x), ctypes.sizeof(x))

def ReleaseKey(hexKeyCode):
    x = INPUT(type=INPUT_KEYBOARD,
              ki=KEYBDINPUT(wVk=hexKeyCode,
                            dwFlags=KEYEVENTF_KEYUP))
    ctypes.windll.user32.SendInput(1, ctypes.byref(x), ctypes.sizeof(x))

def AltTab():
    PressKey(VK_MENU)   # Alt
    PressKey(VK_TAB)    # Tab
    ReleaseKey(VK_TAB)  # Tab~
    time.sleep(2)
    ReleaseKey(VK_MENU) # Alt~

if __name__ == "__main__":
    AltTab()</code>
ログイン後にコピー

結論

このアプローチにより、キーを押すことを含むキーボード イベントの正確なシミュレーションが可能になります。 、キーの保持と解放、ctypes を使用した Windows API 関数との対話。提供されている例では、Alt-Tab を 2 秒間押し続けることをシミュレートし、ctypes によって提供される機能の使用を示しています。

以上がctypes を使用して Python でキーボード イベントをシミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート