在Java中模拟随机密钥事件

时间:2013-10-11 19:22:13

标签: java keyboard simulation awtrobot

我正在开发一个程序,以类似人的方式模拟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中的随机键)。我该怎么做呢?我不能想到我已经拥有的编程知识的逻辑解决方案(遗憾的是最小的)

感谢您的任何回复。

3 个答案:

答案 0 :(得分:1)

你可以定义一个数组(或者你喜欢的列表)somewere(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.keyRelease之后应该完成的robot.keyPress

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我只会在33&之间生成一个随机数。然后每一个字母随机添加一个32. 32是一个空格。 65-90为大写,97-122为小写。

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

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

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

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

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

System.out.println(KeyEvent.VK_SPACE);

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

相关问题