2010-06-02 27 views
8

¿Cómo capturar la imagen de la pantalla con el puntero del mouse sobre ella en Java? Sé que puedo capturar la pantalla con la clase Robot, pero captura la pantalla sin el puntero del mouse, por lo que esta no es una solución para mí.Cómo capturar la imagen de la pantalla con el puntero del mouse en Java

+0

¿Qué plataforma de host? – trashgod

+0

Um, ¿te refieres a sistema operativo? Windows Vista. Esto importa? – solgar

+0

Eso no debería importar. Java es plataforma independiente. – BalusC

Respuesta

18

Eso no es directamente posible, pero puede usar MouseInfo#getPointerInfo() para obtener información sobre dónde se encuentra actualmente el puntero.

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

Después de conseguir la captura de pantalla como BufferedImage, puede colocar su propia imagen del cursor exactamente en esa ubicación en la pantalla con la ayuda de la API Java 2D.

Rectangle screen = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); 
BufferedImage screenCapture = new Robot().createScreenCapture(screen); 

Image cursor = ImageIO.read(new File("c:/cursor.gif")); 
int x = MouseInfo.getPointerInfo().getLocation().x; 
int y = MouseInfo.getPointerInfo().getLocation().y; 

Graphics2D graphics2D = screenCapture.createGraphics(); 
graphics2D.drawImage(cursor, x, y, 16, 16, null); // cursor.gif is 16x16 size. 
ImageIO.write(screenCapture, "GIF", new File("c:/capture.gif")); 
+0

+1 ¡Prueba por contra-ejemplo! :-) – trashgod

+0

Esto no guarda el cursor real, solo un cursor marcador de posición del archivo. Si mi cursor es diferente (cursor de mano, cursor de arrastre, cursores de cambio de tamaño, sin cursor en absoluto, paquete de cursores personalizado en el panel de control), se rompe. –

+1

@ Zom-B: como respondieron, eso no es directamente posible. Así que esta es realmente su mejor opción, que debería ser suficiente si su único interés es la posición del cursor. Si conoce una solución mejor, no dude en publicarla :) – BalusC

0

Puede utilizar Java Native Access para acceder a sistemas operativos cursores de ratón/punteros específicos de forma dinámica.

+0

¿Dónde puede solucionar este problema? ¿podría darnos más detalles sobre la solución? –

Cuestiones relacionadas