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 ?

DDD
DDDoriginal
2024-11-08 07:31:01551parcourir

How can you simulate keyboard events in Python using ctypes?

Simulation d'événements clavier avec des ctypes

Introduction

Le but est de créer un programme Python qui simule les événements du clavier sur un ordinateur, faisant en sorte que le système les perçoive comme de véritables frappes au clavier. Cet article explore une solution utilisant la bibliothèque ctypes.

Approche ctypes

ctypes fournit un moyen d'interagir avec les fonctions de l'API Windows en Python. Pour simuler des événements de clavier, nous utilisons des fonctions spécifiques de la DLL 'user32' :

  • SendInput(nInputs, pInputs, cbSize) : envoie plusieurs événements d'entrée au système.
  • MapVirtualKeyExW(wVk, uMapType, dwhkl) : convertit un code de clé virtuelle en code scan et vice versa.

Structures de données personnalisées

Pour représenter la saisie au clavier, nous définissons des structures de données personnalisées en Python qui correspondent aux structures ctypes natives :

  • INPUT : une union qui peut contenir différents types de saisie, y compris le clavier, la souris et le matériel.
  • KEYBOARDINPUT : représente les événements de saisie au clavier.

Appuyer et relâcher les touches

Pour appuyer et relâcher les touches, nous définissons des fonctions qui créent et envoient des structures INPUT appropriées :

  • PressKey(hexKeyCode) : Crée et envoie une structure INPUT pour appuyer sur un key.
  • ReleaseKey(hexKeyCode) : Crée et envoie une structure INPUT pour libérer une clé.

Exemple Alt-Tab

Pour démontrer l'utilisation de ces fonctions, nous fournissons un exemple qui simule une pression prolongée sur Alt-Tab pendant 2 secondes :

<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>

Conclusion

Cette approche permet une simulation précise des événements du clavier, notamment l'appui, le maintien et le relâchement des touches, en utilisant des ctypes pour interagir avec les fonctions de l'API Windows. L'exemple fourni simule le maintien d'un appui sur Alt-Tab pendant 2 secondes, démontrant l'utilisation de la fonctionnalité fournie par les ctypes.

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