在 Java 中模拟随机键事件



我正在开发一个程序,以类似人类的方式模拟Java中的按键。目标是每 x 秒发送一次随机按键(x 是两个整数之间的随机数)。这是我到目前为止的代码:

public class AutoKeyboard {
    public static int randInt(int min, int max) { // Method to generate random int
        int randomNum = rand.nextInt((max - min) + 1) + min;
        return randomNum;
    }
    public static void main(String[] args) throws InterruptedException {
        int running = 1;
        while (running == 1) {
            try {
                int delay = randInt(336415,783410); // Generates random int between two integers
                Robot robot = new Robot();
                Thread.sleep(delay); // Thread sleeps for x (random int) milliseconds
                robot.keyPress(KeyEvent.VK_SPACE); // Simulating press of space bar
            } catch (AWTException e) {
                e.printStackTrace();
            }
        }
    }
}

我想实现的是随机Keyevent.VK_SPACE,因此它可以是列表中的任何键而不是空格键(例如,它会按 A-D 中的随机键)。我将如何做到这一点?我想不出我已经拥有的编程知识的逻辑解决方案(可悲的是,这是最小的)

感谢您的任何回复。

你可以定义一个数组(或者如果你愿意的话,也可以定义一个列表),一些(final static会很好),包含您希望能够按下的所有可能的键。这可能相当冗长,但使您可以灵活地使用所需的任何密钥:

int possibleKeys = new int[]{
    KeyEvent.VK_SPACE, 
    KeyEvent.VK_0,
    KeyEvent.VK_A,
    KeyEvent.VK_UP
};

您甚至可以对共享相同 ASCII 值的常量使用相应的字符:

int possibleKeys = new int[]{
    ' ',
    '0',
    'A', // careful not to use 'a' though!
    KeyEvent.VK_UP
};

然后只需从该数组中选择一个随机键代码:

Random rand = new Random();
int i = rand.nextInt(possibleKeys.length);
int keyCode = possibleKeys[i];

另外,我看到您缺少robot.keyPress后应该完成的robot.keyRelease

robot.keyPress(keyCode);   // Simulating press of a key
robot.keyRelease(keyCode); // Simulating release of a key

我只会生成一个介于 33 和 126 之间的随机数。然后每对字符随机添加一个 32。32是一个空格。65 - 90 为大写,97-122 为小写。

好资源:http://www.asciitable.com/

要生成一个随机数,我将:

Random randomGenerator = new Random();
int ran = randomGenerator.nextInt(126 - 33);
ran += 33;

然后 ran 将是你的随机角色。你可以有一个循环,做几次。

您甚至不需要使用KeyEvent.VK_SPACE。如果您使用:

System.out.println(KeyEvent.VK_SPACE);

您将获得"32"的回报。这对应于ASCII图表,只需使用它。

由于KeyEvent为键定义了纯整数,因此您可以使用它们而不是KeyEvent.VK_X。那么获得一些随机整数应该不是问题。
请访问 http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/event/KeyEvent.html 以获取钥匙代码。

最新更新