jueves, 29 de enero de 2009

La clase Robot en Java

La clase Robot en java se encuentra en el paquete java.awt y tiene funcionalidades bastantes interesantes, para los que nos gusta improvisar con los códigos no viene de maravilla ya que sus funcionalidades se prestan para cosas bastante ocurrentes y útiles por su puesto.

1- Haciendo travesuras con el mouse:

Una de sus utilidades es simular la utilización del mouse por un usuario por ejemplo:


Robot robot = new Robot();

//Movemos el mouse a la posición de la pantalla que queramos

robot.mouseMove(x, y);

//presionamos el click derecho
robot.mousePress(InputEvent.BUTTON2_MASK);
robot.mouseRelease(InputEvent.BUTTON2_MASK);


2- El teclado esta loco:

Es posible simular las pulsaciones de teclas de un usuario utilizando alguna de las bondades que nos brinda Robot.

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;

public class test
{
/
public static void main(String[] args)
{
try
{
Robot robot = new Robot();
// abriendo el menu inicio
robot.keyPress(KeyEvent.VK_WINDOWS);
robot.keyRelease(KeyEvent.VK_WINDOWS);
// lanzando el explorerador
robot.keyPress(KeyEvent.VK_WINDOWS);
robot.keyPress(KeyEvent.VK_E);
robot.keyRelease(KeyEvent.VK_E);
robot.keyRelease(KeyEvent.VK_WINDOWS);
}
catch (AWTException e)
{
e.printStackTrace();
}
}
}

3- Espiando lo que pasa en la PC.

Nuestra mágica clase nos permite realizar capturas de nuestra pantalla con gran nitidez, hay que destacar que cuando realizamos esta función no se refleja el mouse en dicha imagen pero eso se puede resobre.

MouseInfo.getPointerInfo().getLocation().x;
MouseInfo.getPointerInfo().getLocation().y;

Resuelto el problema pasaremos al plato fuerte:

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

public static void main(String[] args) throws IOException
{
try
{
Robot robot = new Robot();
BufferedImage pantalla = robot.createScreenCapture(new Rectangle (Toolkit.getDefaultToolkit().getScreenSize()));
File file = new File("C:\\captura.jpg");
ImageIO.write(pantalla, "jpg", file);
}
catch (AWTException e)
{
e.printStackTrace();
}
}
}

Dandole un buen uso a esta clase, obtendran sin dudas cosas muy interesantes.

10 comentarios:

  1. ola amigo muy interesante el tema, pero tengo una pregunta como hago para ver lo que hace la otra pc, pero ya no x fotos sino como si fuera en tiempo real.

    si tienes ese ejemplo enviamelo a mi msn happy_11_17@hotmail.com

    ResponderEliminar
  2. como aria para tomar fotos sin que uno sobreescriba a las demas

    ResponderEliminar
  3. tienes que hacer un timer para que se refresque la imagen entonces asi lo simularas mas tipo tiempo real !!

    ResponderEliminar
  4. Muy buen post, ¿Se podrá bloquear el teclado o por lo menos la combinación de teclas Alt+Tab/Inicio+D/Alt+F4 con esta clase Robot?

    ResponderEliminar
  5. Muy buen post, ¿Se podrá bloquear el teclado o por lo menos la combinación de teclas Alt+Tab/Inicio+D/Alt+F4 con esta clase Robot?

    ResponderEliminar
  6. alguien me puede dar una sugerencia con esta clase? tal ves...resutla que he elboarado un programa en java que trabaja con codigo de barras para calcular la cantidad de stock que se va vendiendo...el asunto es que paso el lector de codigo de barra sobre un Jtextfield aprieto tecla ENTER y bueno los calculos lo hace perfecto la idea es userlo automatico tal ves esta clase me ayude ...si alguien tiene una sugerencia mi mail es seba266@yahoo.com.ar

    ResponderEliminar
  7. Hola amigo, queria saber como hacer para que el "bot" que estoy creando, haga clik en un lugar especifico dando unos patrones. por ejemplo recoger cajas siendo estas iguales, y solo en un lugar determinado

    Muchas gracias si me puedes ayudar te lo agradeceria mucho

    ResponderEliminar
  8. con esto en el inicio de tu ventana this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); no podran cerrar con alt f4 y si quieres mas ayuda this.setAlwaysOnTop(true); esta mantendra la vista sobre todas las cosas que esten abiertas :D

    ResponderEliminar
    Respuestas
    1. el problema con this.setAlwaysOnTop(true) es que pierde el foco de la ventana y si escribes algo no lo captura tu ventana java...

      Eliminar
  9. Me dio mucha risa andar buscando algo de este tema y conseguirme con tu post, jajjajaa, un abrazo saludos

    ResponderEliminar