Search code examples
javawindowsawtrobot

java.awt.Robot inside games?


I'm trying to simulate a keystroke with the code below. When I open notepad it works fine but when I open the game in which I want to use it, it doesn't do anything. So keystrokes don’t seem to work. I tried to simulate mouse movement and clicks, those action do work. Does anyone know how to fix this problem?

I found this question, How can I use java.awt.Robot inside games? but I can't add a comment or anything.

package MyProject;

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

public class KeyStroke {

    public static void main(String[] args) throws AWTException {

        Robot robot = new Robot();

        robot.delay(3000);

        robot.keyPress(KeyEvent.VK_Q);
        robot.keyPress(KeyEvent.VK_W);
        robot.keyPress(KeyEvent.VK_E);
        robot.keyPress(KeyEvent.VK_R);
        robot.keyPress(KeyEvent.VK_T);
        robot.keyPress(KeyEvent.VK_Y);

    }

}

Solution

  • You probably want to press and release the keys to simulate a keystroke, i.e. your current code will hold down Q, W, E, R, T and Y until a release is triggered. Also, you may want to hold them down for a small amount of time, because that caused some problems for me when I did something like this.

    Code:

    package MyProject;
    
    import java.awt.AWTException;
    import java.awt.Robot;
    import java.awt.event.KeyEvent;
    
    public class KeyStroke {
        private static Robot robot;
    
        public static void main(String[] args) throws AWTException {
            robot = new Robot();
            robot.delay(3000);
            keystroke(KeyEvent.VK_Q);
            keystroke(KeyEvent.VK_W);
            keystroke(KeyEvent.VK_E);
            keystroke(KeyEvent.VK_R);
            keystroke(KeyEvent.VK_T);
            keystroke(KeyEvent.VK_Y);
        }
    
        private static void keystroke(int key) {
            robot.keyPress(key);
            robot.delay(100); // hold for a tenth of a second, adjustable
            robot.keyRelease(key);
        }
    }