Simular una pulsación de tecla en C#

Saad Aslam 12 octubre 2023
Simular una pulsación de tecla en C#

Este artículo muestra un enfoque rápido y sencillo para simular una pulsación de tecla en C#.

Durante la prueba, es posible que deba transmitir una secuencia de botones presionados (una pulsación de tecla) al objeto elegido: un control o una ventana. Puede simular pulsaciones de teclas a partir de pruebas de palabras clave y secuencias de comandos mediante la transmisión de códigos de teclas al control o ventana elegidos.

Crear una aplicación de formulario en C#

En primer lugar, cree una nueva aplicación de formulario de Windows en Visual Studio.

Abra su archivo de diseño .cs y cree una etiqueta llamada numberLabel y asígnele un texto que pueda ser "Text To Be Displayed", establezca su alineación en el centro central para que se vea limpio.

Vamos a crear numPadButton y alphabetButton, y añadir el texto "Click Me" a ambos botones. Haga doble clic en su numPadButton, que lo llevará a la función numPadButton_Click.

Dentro de esta función, asigna algún texto a la numberLabel. Este texto aparecerá una vez que se presione la tecla que asignaremos.

private void numPadButton_Click(object sender, EventArgs e) {
  numberLabel.Text = "Numpad Button 0 Pressed";
}

Realice los mismos pasos con el alphabetButton. Dentro de la función alphabetButton_Click, asigne a numberLabel un texto diferente, ya que este texto se mostrará en una tecla diferente presionada.

private void alphabetButton_Click(object sender, EventArgs e) {
  numberLabel.Text = "Enter Pressed";
}

Producción:

crear una aplicación de formulario en C#

Necesitamos habilitar la funcionalidad KeyPreview para nuestro formulario que determina si los eventos del teclado están registrados con el formulario o no. Por lo tanto, haga clic en todo el formulario y, desde el panel de propiedades a su derecha, establezca el valor KeyPreview en verdadero.

Luego, necesitamos un evento KeyDown que identifique y maneje el evento de pulsación de tecla, y para agregarlo, vaya al panel de propiedades y abra la pestaña de eventos con un símbolo de rayo. Desplácese hacia abajo hasta el evento KeyDown y haga doble clic en él.

Creará un método Form1_KeyDown() y lo llevará a este método. Este método toma dos argumentos, un sender de tipo object y un evento e de tipo KeyEventArgs.

private void Form1_KeyDown(object sender, KeyEventArgs e) {}

Ahora debemos usar el clic del botón para imitar la pulsación de una determinada tecla. Esta función recibirá la tecla presionada, y verificaremos si la clave recibida es NumPad0 y luego realizaremos el clic en numPadButton.

if (e.KeyCode == Keys.NumPad0) {
  numPadButton.PerformClick();
}

Con el alphabetButton, tenemos que seguir el mismo proceso. Entonces, desde la pestaña de eventos, haga doble clic en el evento KeyUp, y dentro de la función Form1_KeyUp(), verifique si la clave recibida es Enter, luego haga clic en el alphabetButton.

using System;

namespace SimulateKeyPress {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    private void numPadButton_Click(object sender, EventArgs e) {
      numberLabel.Text = "Numpad Button 0 Pressed";
    }

    private void alphabetButton_Click(object sender, EventArgs e) {
      numberLabel.Text = "Enter Pressed";
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e) {
      if (e.KeyCode == Keys.NumPad0) {
        numPadButton.PerformClick();
      }
    }

    private void Form1_KeyUp(object sender, KeyEventArgs e) {
      if (e.KeyCode == Keys.Enter) {
        alphabetButton.PerformClick();
      }
    }

    private void numberLabel_Click(object sender, EventArgs e) {}
  }
}

Producción:

Cuando se presiona el Numpad 0 desde el teclado.

teclado numérico 0 se presiona desde el teclado

Cuando se presiona Enter desde el teclado.

se presiona la tecla enter desde el teclado

Autor: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn

Artículo relacionado - Csharp GUI