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.
Asked
Active
Viewed 1.0k times
9
-
Um, you mean OS? Windows Vista. This matters? – solgar Jun 02 '10 at 23:31
-
That shouldn't matter. Java is platform independent. – BalusC Jun 02 '10 at 23:42
-
@BalusC is correct, but some platforms have convenient tools, e.g. _Grab.app_ on Mac OS X. – trashgod Jun 03 '10 at 01:23
2 Answers
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
-
Where you able to fix this issue ? could you give us more details about the solution ? – Mehdi Karamosly Aug 19 '13 at 06:51