Lire en anglais

Partager via


Comment simuler des événements clavier (Windows Forms .NET)

Windows Forms fournit quelques options pour simuler par programmation l’entrée du clavier. Cet article fournit une vue d’ensemble de ces options.

Utilisez SendKeys

Windows Forms fournit la classe System.Windows.Forms.SendKeys pour envoyer des séquences de touches à l’application active. Il existe deux méthodes pour envoyer des séquences de touches à une application : SendKeys.Send et SendKeys.SendWait. La différence entre les deux méthodes est que SendWait bloque le thread actuel lorsque la séquence de touches est envoyée, en attendant une réponse, tandis que Send ne le fait pas. Pour plus d’informations sur SendWait, consultez Pour envoyer une séquence de touches à une autre application.

Attention

Si votre application est destinée à une utilisation internationale avec un large éventail de claviers, l’utilisation de SendKeys.Send peut produire des résultats imprévisibles et doit être évitée.

En arrière-plan, SendKeys utilise une implémentation Windows plus ancienne pour envoyer des entrées, ce qui peut échouer sur Windows moderne, où il est prévu que l’application ne s’exécute pas avec des droits d’administration. Si l’ancienne implémentation échoue, le code tente automatiquement l’implémentation Windows la plus récente pour l’envoi d’entrée. En outre, lorsque la classe SendKeys utilise la nouvelle implémentation, la méthode SendWait ne bloque plus le thread actuel lors de l’envoi de séquences de touches à une autre application.

Important

Si votre application s’appuie sur un comportement cohérent quel que soit le système d’exploitation, vous pouvez forcer la classe SendKeys à utiliser la nouvelle implémentation en ajoutant le paramètre d’application suivant à votre fichier app.config.

<appSettings>
  <add key="SendKeys" value="SendInput"/>
</appSettings>

Pour forcer la classe SendKeys à uniquement utiliser l’implémentation précédente, utilisez plutôt la valeur "JournalHook".

Pour envoyer une séquence de touches à la même application

Appelez la méthode SendKeys.Send ou SendKeys.SendWait de la classe SendKeys. Les séquences de touches spécifiées sont reçues par le contrôle actif de l’application.

L'exemple de code suivant utilise Send pour simuler l'appui simultané sur les touches ALT et DOWN. Ces séquences de touches entraînent l’affichage de la liste déroulante du contrôle ComboBox. Cet exemple suppose une Form avec un Button et un ComboBox.

private void button1_Click(object sender, EventArgs e)
{
    comboBox1.Focus();
    SendKeys.Send("%+{DOWN}");
}

Pour envoyer une séquence de touches à une autre application

Les méthodes SendKeys.Send et SendKeys.SendWait envoient des séquences de touches à l’application active, qui est généralement l’application à partir de laquelle vous envoyez des séquences de touches. Pour envoyer des séquences de touches à une autre application, vous devez d’abord l’activer. Étant donné qu’il n’existe aucune méthode managée pour activer une autre application, vous devez utiliser des méthodes Windows natives pour concentrer l’autre application. L’exemple de code suivant utilise l’appel de plateforme pour appeler les méthodes FindWindow et SetForegroundWindow pour activer la fenêtre d’application Calculatrice, puis appelle Send pour émettre une série de calculs à l’application Calculatrice.

L’exemple de code suivant utilise Send pour simuler l’appui sur les touches dans l’application Calculatrice Windows 10. Il recherche d’abord une fenêtre d’application avec le titre de Calculator, puis l’active. Une fois activés, les séquences de touches sont envoyées pour calculer 10 plus 10.

[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);

private void button1_Click(object sender, EventArgs e)
{
    IntPtr calcWindow = FindWindow(null, "Calculator");

    if (SetForegroundWindow(calcWindow))
        SendKeys.Send("10{+}10=");
}

Utiliser les méthodes OnEventName

Le moyen le plus simple de simuler des événements de clavier consiste à appeler une méthode sur l’objet qui déclenche l’événement. La plupart des événements ont une méthode correspondante qui les appelle, nommées dans le modèle de On suivi de EventName, comme OnKeyPress. Cette option n’est possible que dans les contrôles ou formulaires personnalisés, car ces méthodes sont protégées et ne sont pas accessibles en dehors du contexte du contrôle ou du formulaire.

Ces méthodes protégées sont disponibles pour simuler des événements de clavier.

  • OnKeyDown
  • OnKeyPress
  • OnKeyUp

Pour plus d’informations sur ces événements, consultez Utilisation des événements clavier (Windows Forms .NET).

Voir aussi