有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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();
            }
        }
    }
}

我想实现的是关键事件。VK_空格是随机的,因此它可以是列表中的任意键,而不是空格键(例如,它会按a-D中的随机键)。我该怎么做呢?用我已有的编程知识,我想不出一个合乎逻辑的解决方案(遗憾的是,这是最低限度的)

感谢您的回复


共 (3) 个答案

  1. # 2 楼答案

    你可以定义一个数组(或者一个列表,如果你愿意的话)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
    
  2. # 3 楼答案

    我只会生成一个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_空间。如果您使用:

    System.out.println(KeyEvent.VK_SPACE);
    

    你会得到“32”的回报。这对应于ASCII图表,只需使用它