Maison >développement back-end >C++ >Comment puis-je générer par programme des événements de pression de touche dans les applications C# WPF ?

Comment puis-je générer par programme des événements de pression de touche dans les applications C# WPF ?

DDD
DDDoriginal
2025-01-16 20:37:11874parcourir

How Can I Programmatically Generate Keypress Events in C# WPF Applications?

Génération programmatique d'événements de pression de touche en C#

La génération programmatique d'événements qui simulent les pressions sur le clavier est une tâche cruciale dans divers scénarios, tels que les tests d'automatisation et simulation d'interface utilisateur. Cet article explique comment obtenir cette fonctionnalité en C#, en particulier dans le framework WPF.

Solution pour les applications WPF

Une approche simple pour les applications WPF consiste à utiliser KeyEventArgs. classe et la méthode RaiseEvent sur l'élément cible. Voici un exemple pour envoyer un événement Insert key KeyDown à l'élément actuellement ciblé :

var key = Key.Insert;                    // Key to send
var target = Keyboard.FocusedElement;    // Target element
var routedEvent = Keyboard.KeyDownEvent; // Event to send
     target.RaiseEvent(
  new KeyEventArgs(
    Keyboard.PrimaryDevice,
    PresentationSource.FromVisual(target),
    0,
    key)
  { RoutedEvent=routedEvent }
);

Cette solution élimine le besoin d'appels natifs ou de manipulation des composants internes de Windows, garantissant ainsi la fiabilité. De plus, il permet de simuler des frappes précises sur des éléments spécifiques.

Événements TextInput

Pour l'envoi d'événements TextInput, le code diffère légèrement :

var text = "Hello";
var target = Keyboard.FocusedElement;
var routedEvent = TextCompositionManager.TextInputEvent;

target.RaiseEvent(
  new TextCompositionEventArgs(
    InputManager.Current.PrimaryKeyboardDevice,
    new TextComposition(InputManager.Current, target, text))
  { RoutedEvent = routedEvent }
);

Considérations :

  • Contrôles généralement attendez-vous à recevoir les événements Preview avant leurs événements correspondants.
  • Le déclenchement d'événements directement via RaiseEvent contourne le méta-traitement, obtenant ainsi le comportement souhaité dans la plupart des scénarios. Cependant, InputManager.ProcessInput() doit être utilisé pour simuler les touches réelles du 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