lunes, 2 de febrero de 2015

Automatizar teclado y ratón con C#

Como bien dice la cabecera de esta entrada, vamos a ver cómo utilizar una pequeña biblioteca de clases para capturar movimientos y pulsaciones del ratón y teclado. Esto se hace a través de Hooks. En la biblioteca de clases creada (llamada KeyboardAndMouse), veremos cómo hacer todo un poco más sencillo. Vemos un vídeo de la pequeña aplicación creada.


A continuación vamos a crear una aplicación que simplemente registre los movimientos y pulsaciones del ratón y las pulsaciones del teclado. Abrimos nuestra versión de Visual Studio, y creamos un nuevo proyecto Windows Forms. Lo primero que vamos a hacer es agregar la biblioteca de clases  KeyboardAndMouse (si no sabes cómo agregar una biblioteca de clases, busca en cualquiera de mis entradas anteriores y ahí lo verás). Hecho esto, y muy importante, vamos a nuestra entrada de la aplicación (la clase estática Program) y en el método Main vamos a escribir lo siguiente.

//Inicializamos la clase MouseActions y KeyboadActions
 KeyboardAndMouse.Mouse.MouseActions.initialize();
 KeyboardAndMouse.Keyboard.KeyboardActions.initialize();

Hecho esto, vamos al formulario y añadimos dos cuadros de texto (txtMouse txtKeyboard), quedaría tal que así.

Formulario principal

Ahora vamos a introducir el código del formulario.

public partial class Form1 : Form
    {
        //Objetos para manejar las funciones de teclado y ratón
        private KeyboardAndMouse.Keyboard.KeyboardActions keyboard;
        private KeyboardAndMouse.Mouse.MouseActions mouse;

        public Form1()
        {
            InitializeComponent();
            //Inicializamos objetos 
            this.keyboard = new KeyboardAndMouse.Keyboard.KeyboardActions();
            this.mouse = new KeyboardAndMouse.Mouse.MouseActions();
            //Nos suscribimos a los eventos que nos informan las acciones del teclado 
            //y ratón hechas por el usuario
            this.keyboard.KeyboardChanged += keyboard_KeyboardChanged;
            this.mouse.MouseChanged += mouse_MouseChanged;
            //Empezamos a registrar
            start();
        }

        //Da la orden de empezar a registrar los eventos del usuario
        private void start()
        {
            this.keyboard.start();
            this.mouse.start();
        }

        //Escribe los datos del ratón
        void mouse_MouseChanged(KeyboardAndMouse.Mouse.MouseData value)
        {
            this.txtMouse.AppendText(value.MouseAction + " --- " + value.MouseCoordinates.ToString() + "\n");
        }
        //Escribe los datos del teclado
        void keyboard_KeyboardChanged(KeyboardAndMouse.Keyboard.KeyboardData value)
        {
            this.txtKeyboard.AppendText(value.Type.ToString() + " --- " + value.KeyAction.ToString() + "\n");
        }
    }

Pulsamos F5 para compilar y ejecutar, y registra las acciones del usuario sobre el teclado y ratón.

Resultado

Hay que tener en cuenta que todo es bastante básico, es decir, en el ejemplo del vídeo (que ejecuta las acciones guardadas) no funcionan las combinaciones de teclas como puede ser Shift + letra para escribir una mayúscula.

A continuación os muestro los códigos para descargar:
Biblioteca de clases:

Ejemplo del vídeo:

Ejemplo de la entrada:

2 comentarios:

  1. Son cuadros de Texto (txtMouse y txtKeyboard)??

    ResponderEliminar
  2. muy bueno, me ayudo mucho, una consulta, yo guarda la secuencia en una archivo txt, como podría ejecutar la secuencia del archivo que guarde?

    ResponderEliminar