Java – Clase java.awt.Robot – Control del ratón, teclado, y captura de pantalla

Para poder tener control sobre el ratón y el teclado del PC a través de la API estándar de Java haremos uso de la clase Robot, a continuación veremos de que trata esta clase y sus posibilidades.

Clase java.awt.Robot


Esta clase, ubicada en el paquete java.awt, la tenemos disponible desde la versión J2SE 1.3 y fue diseñada con el propósito de la automatización de pruebas y cualquier actividad que involucre el ratón o teclado sin la presencia o interacción física del usuario. Con esta clase se pueden generar auténticos eventos de entrada nativos del sistema pudiendo emular casi toda acción del usuario. Hay que destacar que algunos sistemas operativos podrían restringir el acceso a estos eventos de entrada, en tal caso una AWTException seria arrojada al tratar de construir un objeto de esta clase.

– Control del ratón –

Hay muchas cosas que podemos hacer con el ratón, veamos:

  • Mover el puntero de posición:
import java.awt.Robot;
import java.awt.AWTException;

class ControlMouse1 {

    public static void main(String[] args) throws AWTException; {
        //instanciamos la clase Robot
        Robot robot = new Robot();

        //cambia la posición en pantalla del puntero a las coordenadas
        //X=300 e Y=600.
        robot.mouseMove(300, 600);
    }
}
  • Click con el botón derecho:
import java.awt.Robot;
import java.awt.AWTException;
import java.awt.event.InputEvent;

class ControlMouse2 {

    public static void main(String[] args) throws AWTException {
        //instanciamos la clase Robot
        Robot robot = new Robot();

        //click con el botón derecho
        robot.mousePress(InputEvent.BUTTON3_MASK);
        robot.mouseRelease(InputEvent.BUTTON3_MASK);
    }
}
  • Click con el botón izquierdo:
import java.awt.Robot;
import java.awt.AWTException;
import java.awt.event.InputEvent;

class ControlMouse3 {

    public static void main(String[] args) throws AWTException {
        //instanciamos la clase Robot
        Robot robot = new Robot();

        //click con el boton izquierdo
        robot.mousePress(InputEvent.BUTTON1_MASK);
        robot.mouseRelease(InputEvent.BUTTON1_MASK);
    }
}
  • Click con la rueda del ratón:
import java.awt.Robot;
import java.awt.AWTException;
import java.awt.event.InputEvent;

class ControlMouse4 {

    public static void main(String[] args) throws AWTException {
        //instanciamos la clase Robot
        Robot robot = new Robot();

        //click con la rueda del ratón
        robot.mousePress(InputEvent.BUTTON3_DOWN_MASK);
        robot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK);
    }
}
  • Desplazar la rueda del ratón:
import java.awt.Robot;
import java.awt.AWTException;
import java.awt.event.InputEvent;

class ControlMouse5 {

    public static void main(String[] args) throws AWTException {
        //instanciamos la clase Robot
        Robot robot = new Robot();

        //desplazar la rueda del ratón
        robot.mouseWheel(-100);
    }
}

– Control del teclado –

Podremos presionar y soltar teclas de nuestro teclado, veamos algunos ejemplos:

  • Presionar/soltar una tecla:
import java.awt.Robot;
import java.awt.AWTException;
import java.awt.event.InputEvent;

class ControlKeyboard1 {

    public static void main(String[] args) throws AWTException {
        //instanciamos un robot
        Robot robot = new Robot();

        //abrir el menú inicio en windows
        robot.keyPress(KeyEvent.VK_WINDOWS);
        robot.keyRelease(KeyEvent.VK_WINDOWS);
    }
}
  • Escribiendo un texto en la ventana activa:
import java.awt.Robot;
import java.awt.AWTException;
import java.awt.event.KeyEvent;

class ControlKeyboard2 {

    //arreglo de teclas para escribir "HOLA MUNDO" en la ventana activa del escritorio
    final static int teclas[] = {
        KeyEvent.VK_H, KeyEvent.VK_O,
        KeyEvent.VK_L, KeyEvent.VK_A,
        KeyEvent.VK_SPACE, KeyEvent.VK_M,
        KeyEvent.VK_U, KeyEvent.VK_N,
        KeyEvent.VK_D, KeyEvent.VK_O
    };

    public static void main(String[] args) throws AWTException {
        //instanciamos la clase Robot
        Robot robot = new Robot();

        //esperamos 2 segundos antes de empezar a escribir
        robot.delay(2000);

        //iteramos a través del arreglo de teclas
        for (int i = 0 ; i < teclas.length ; i++) {
            //presionamos y soltamos cada tecla del array
            robot.keyPress(teclas[i]);
            robot.keyRelease(teclas[i]);

            //dormimos el robot por 250 mili segundos luego de usar cada tecla
            robot.delay(250);
        }
    }
}

Prestar atención en el uso del método void delay(int milisegundos) el cual puede sernos de gran utilidad para demorar las acciones del robot, ten a mano una ventana de NotePad (o cualquier otro editor de texto) abierta y luego de ejecutar este ejemplo actívala para ver el resultado.

– Tomar una captura de la pantalla –

Otra utilidad que nos permite la clase Robot es obtener una imagen de la pantalla gracias al método createScreenCapture(Rectangle screenRect) donde pasamos como parámetro un objeto Rectangle que contendrá el espacio de la pantalla a obtener, veamos como hacer esto:

import java.awt.Robot;
import java.awt.AWTException;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.Rectangle;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

class ScreenPicture {

    public static void main(String[] args) throws AWTException, IOException {
        //instanciamos la clase Robot
        Robot robot = new Robot();

        //obtenemos nuestra pantalla como imagen
        BufferedImage pantalla = robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));

        //creamos un archivo de extensión .JPG en el directorio home del usuario del sistema
        File file = new File(System.getProperty("user.home") + File.separator + "pantalla.jpg");

        //guardamos el contenido de la imagen en el archivo .JPG
        ImageIO.write(pantalla, "jpg", file);
    }
}

Ejemplos:
* Clase java.awt.Robot

Documentación:
* Java™ Platform, Standard Edition 6 API Specification


, , , , , , , ,

  1. #1 por shamir deyvis el diciembre 14, 2012 - 9:17 pm

    wow esta genial, me gustaria que hagas mas ejemplos de esta clase Robot, lo andaba buscando… buen aporte….

  2. #2 por Isaac Perez Briceño el marzo 18, 2013 - 1:26 am

    yo utilizo esta clase para crear ventanas de presentación cuando se abren mis programitas, esas ventanas de presentacion como la que aparece cuando abrimos algun programa como word, nero, corel, etc, si alguien quiere que le envie un ejemplo mi correo es: cibereternet@hotmail.com.

  3. #3 por Isaac Perez Briceño el marzo 18, 2013 - 1:31 am

    Tambien con esta clase se puede crear un programa con el cual se pueda obtener el usuario y el password de alguna cuenta, como por ejemplo skype, messenger, etc, primero seria ver que ventana es abierta (quizas tomar el nombre del proceso) si es por ejemplo el de skype, entonces empezar a “leer” que teclas son presionadas y despues concatenar los caracteres leidos y ahi esta, ya lo tenemos, el usuario y el pass de esa cuenta, claro no lo he hecho, solo opino que seria una de las tantas formas que pueden existir

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: