9

How to capture screen image with mouse pointer on it in Java? In know that i can capture screen with Robot class, but it captures screen without mouse pointer on it, so this is not an solution for me.

solgar
  • 4,312
  • 2
  • 26
  • 30

2 Answers2

21

That's not directly possible, but you can use MouseInfo#getPointerInfo() to get information where the pointer is currently located.

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

After getting the screenshot as BufferedImage, you can place your own cursor image at exactly that location on the screenshot with help of Java 2D API.

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"));
BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
  • This doesn't save the actual cursor, just a placeholder cursor from file. If my cursor is different (hand cursor, drag cursor, resize cursors, no cursor at all, custom cursor pack in control panel), then it breaks. – Mark Jeronimus Feb 05 '13 at 15:42
  • 1
    @Zom-B: As answered, that's not directly possible. So this is really your best bet which should be sufficient if your sole interest is the cursor position. If you know a better solution, feel free to post it :) – BalusC Feb 05 '13 at 15:42
  • 1. it doesn't answer the original question, it just gives something that approaches it. 2. I'm looking into this because I want to detect if the display is fullscreen (alternatively whenever the mouse is hidden even if not fullscreen), but this appears a dead end. – Mark Jeronimus Feb 05 '13 at 15:47
  • 1
    @Zom-B: As answered, **that's not directly possible**. What follows thereafter was the "best alternative" the OP could get. Oneliner answers like "No that's not possible." aren't my style. Again, if you know a better solution, feel free to post it :) – BalusC Feb 05 '13 at 15:53
  • What does gif of the cursor, which can be different for different items? In the text box, the cursor is text cursor, on a hyperlink cursor "hand" ... – barwnikk Oct 28 '13 at 19:12
0

You can use Java Native Access in order to access operating system specific mouse cursors/pointers dynamically.

devashish jasani
  • 413
  • 1
  • 4
  • 15