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