Maison  >  Article  >  développement back-end  >  Comment simuler des événements de clavier en Python à l'aide de ctypes ?

Comment simuler des événements de clavier en Python à l'aide de ctypes ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-08 20:39:02368parcourir

How to Simulate Keyboard Events in Python Using ctypes?

Comment générer des événements de clavier en Python

Pour qu'un système informatique traite les événements de clavier simulés comme de véritables frappes au clavier, vous avez besoin d'une solution qui va au-delà de l'envoi de caractères aux champs de saisie. Une option viable consiste à utiliser la bibliothèque ctypes pour communiquer directement avec le système d'entrée du système d'exploitation.

L'utilisation de ctypes

ctypes fournit un moyen d'interagir avec les bibliothèques compatibles C. et fonctions dans Python. Pour simuler des événements de clavier à l'aide de ctypes, vous pouvez suivre ces étapes :

  1. Importez les modules nécessaires :
<code class="python">import ctypes
from ctypes import wintypes
import time</code>
  1. Chargez la DLL Windows appropriée :
<code class="python">user32 = ctypes.WinDLL('user32', use_last_error=True)</code>
  1. Définir les structures :
<code class="python"># Keyboard input structure
KEYBDINPUT = ctypes.Structure()
KEYBDINPUT._fields_ = (("wVk", wintypes.WORD),
                        ("wScan", wintypes.WORD),
                        ("dwFlags", wintypes.DWORD),
                        ("time", wintypes.DWORD),
                        ("dwExtraInfo", wintypes.ULONG_PTR))

# General input structure
INPUT = ctypes.Structure()
INPUT._fields_ = (("type", wintypes.DWORD),
                    ("ki", KEYBDINPUT))</code>
  1. Définir les fonctions d'assistance pour appuyer et relâcher les touches :
<code class="python">def PressKey(hexKeyCode):
    x = INPUT(type=INPUT_KEYBOARD, ki=KEYBDINPUT(wVk=hexKeyCode))
    user32.SendInput(1, ctypes.byref(x), ctypes.sizeof(x))

def ReleaseKey(hexKeyCode):
    x = INPUT(type=INPUT_KEYBOARD,
              ki=KEYBDINPUT(wVk=hexKeyCode,
                            dwFlags=KEYEVENTF_KEYUP))
    user32.SendInput(1, ctypes.byref(x), ctypes.sizeof(x))</code>
  1. Utiliser les fonctions pour simuler des événements clés :
<code class="python">PressKey(VK_MENU)  # Alt
PressKey(VK_TAB)   # Tab
ReleaseKey(VK_TAB)  # Tab~
time.sleep(2)
ReleaseKey(VK_MENU)  # Alt~</code>

Supplémentaire Considérations

N'oubliez pas que hexKeyCode fait référence au mappage du clavier virtuel tel que défini par l'API Windows. Une liste de ces codes peut être trouvée dans la documentation MSDN de Microsoft.

Cette approche vous permet de simuler des événements de clavier à un niveau bas, garantissant qu'ils sont traités par le système comme de véritables frappes au clavier.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn