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

Comment puis-je générer par programme des événements de pression de touche en C# ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-16 20:33:13413parcourir

How Can I Programmatically Generate Keypress Events in C#?

Génération procédurale des événements clés C#

Dans le développement d'applications, il est souvent nécessaire de générer par programme des événements clés pour simuler les entrées des utilisateurs ou tester les mécanismes de gestion des événements. Cet article vous expliquera comment créer de tels événements en C# à l'aide de diverses méthodes, notamment des méthodes spécifiques pour WPF, WinForms et Win32.

Méthodes spécifiques à WPF

Pour les applications WPF, vous pouvez simuler des événements clés à l'aide de la construction de classe KeyEventArgs, puis utiliser la méthode RaiseEvent pour les déclencher sur l'élément cible. Par exemple, pour envoyer l'événement KeyDown de la touche Insert à l'élément actuellement ciblé :

<code class="language-csharp">var key = Key.Insert;                    // 要发送的键
var target = Keyboard.FocusedElement;    // 目标元素
var routedEvent = Keyboard.KeyDownEvent; // 要发送的事件
target.RaiseEvent(
  new KeyEventArgs(
    Keyboard.PrimaryDevice,
    PresentationSource.FromVisual(target),
    0,
    key)
  { RoutedEvent=routedEvent }
);</code>

Méthodes spécifiques à WinForms

Dans WinForms, vous pouvez simuler des événements clés en utilisant la méthode SendKeys.Send. Par exemple, pour envoyer la frappe Insérer :

<code class="language-csharp">SendKeys.Send("{INSERT}");</code>

Méthodes spécifiques à Win32

Pour un contrôle de bas niveau sur la simulation de frappe, vous pouvez utiliser les fonctions keybd_event de l'API Windows. Cette fonction vous permet de spécifier des codes de clé virtuelle, des codes de numérisation et d'autres paramètres qui simulent des événements clés. Par exemple, pour envoyer l'événement keydown de la touche Insert :

<code class="language-csharp">// 导入必要的头文件。
[DllImport("user32.dll")]
private static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

// ...

// 定义keydown事件的参数。
const byte VK_INSERT = 0x2D; // Insert键的虚拟键代码。
keybd_event(VK_INSERT, 0, 0, 0); // 发送keydown事件。</code>

Autres consignes

  • Les contrôles s'attendent généralement à recevoir des événements d'aperçu avant les événements réguliers. Lorsque vous simulez des événements clés, assurez-vous de suivre cet ordre.
  • target.RaiseEvent(...)Envoie des événements directement à l'élément cible sans aucun méta-traitement. C'est généralement l'idéal. Cependant, si vous souhaitez simuler de véritables touches du clavier, utilisez plutôt InputManager.ProcessInput().
  • La méthode de simulation des événements de saisie de texte est différente de la méthode de simulation des événements clés.

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