How to use robot.mousePress(int) and robot.mouseRelease(int)?

Hi!
I recently started using the robot library. I tried using inputEvent. and mouseEvent with the BUTTON_MASK1… (I saw those methods on forums)
However;

  1. I can’t use robot.mousePress(int) and robot.mouseRelease(int)
  2. Is there a way to use robot library without try { } catch(Exemption e) { }?

Can you think of a way to use it?

Thank you.

Hi,

After some research, I have a working code :

import java.awt.*;

/**
 * From : https://forum.processing.org/two/discussion/17675/how-to-get-surface-window-x-and-y-coordinates
 */
java.awt.Frame getWindowFrame() {
  return (java.awt.Frame) ((processing.awt.PSurfaceAWT.SmoothCanvas) surface.getNative()).getFrame();
}

/**
 * From : https://stackoverflow.com/questions/19185162/how-to-simulate-a-real-mouse-click-using-java/19296065#19296065
 */
void click(int x, int y) throws AWTException {
  Robot bot = new Robot();
  bot.mouseMove(x, y);    
  bot.mousePress(java.awt.event.InputEvent.BUTTON1_MASK);
  bot.mouseRelease(java.awt.event.InputEvent.BUTTON1_MASK);
}

void setup() {
  size(500, 500);
  background(255);
}

void draw() {
  // Every 50 frames
  if (frameCount % 50 == 0) {
    try {
      java.awt.Frame f = getWindowFrame();
      
      // Get random coordinates on the window
      int randomX = int(random(width));
      int randomY = int(random(height));
      
      // Click at that location
      click(f.getX() + randomX, f.getY() + randomY);
    } catch(Exception e) {
      println(e);
    }
  }
}

void mousePressed() {
  println("Robot clicked at : " + mouseX + ", " + mouseY);
  
  // Draw a black circle
  fill(0);
  circle(mouseX, mouseY, 50);
}


Make sure you don’t put a value that is too low for the click interval because the robot is powerful!
You can still press escape if so.

The only problem is that the frame location is the top left corner and don’t take into account the window header.

Useful links :


For your second question, this is how Java handles exceptions and in a function, you must catch the exception using a try {...} catch {...} or use throws so the function throw the exception higher in the call stack.

Have fun! :wink:

2 Likes

@josephh

Thank you.
Your content has been of great help. thank you.

1 Like

I use Robot for grinding in enchanting in Skyrim so in my case you can’t press escape to exit so I use another way to force quit the program:

I put a file on a stick and copy the path into this code:

String emergencyExit="Some path to a file on a stick";
public boolean checkEmergencyExit() {
  try {
    return new File(emergencyExit).exists();
  }
  catch(Exception e) {
    e.printStackTrace();
    return false;
  }
}
void checkExit() {
  if (checkEmergencyExit()) exit();
}

Next I have my sketch use checkExit after every Robot. Should the script do something it isn’t supposed to I insert the stick stopping the program.

This is also useful if the Robot e.g. accidentally minimizes the window or clicks on another window.

3 Likes