2017-05-12 46 views
0

我正在制造某种带有硒的机器人。有一点我想模拟随机的KeyPress和KeyRelease与机器人类。这将是我宣布的一个随机字符串。我之所以要这样做,是因为我选择了一个下拉菜单,然后我想在每次启动机器人时随机选择一个选项。这里是我多远就来了:如何在Java中模拟随机机器人按键?

Random r = new Random(); 
String alphabet = "abcdfhijlnpsu".toUpperCase(); 

Robot robot = new Robot(); 

robot.keyPress(KeyEvent.HERE I WANT TO SIMULATE RANDOM KEY PRESS FROM STRING alphabet); 
robot.keyRelease(KeyEvent.HERE I WANT TO RELEASE A PREVIOUSLY PRESSED BUTTON THAT WAS RANDOMLY CHOOSEN); 

回答

1
String s = "foobar42"; //Target String 
int l = (int)(Math.random()*s.length()); 
char ch = s.charAt(l); //ch will be a random character from given String 

上面一行可以给出线

int l = new Random().nextInt(s.length()); 

更新替代:您可以使用swith case完成任务

switch (ch) { 
     case 'a': doType(VK_A); break; 
     case 'b': doType(VK_B); break; 
     case 'c': doType(VK_C); break; 
     case 'd': doType(VK_D); break; 
     case 'e': doType(VK_E); break; 
     case 'f': doType(VK_F); break; 
     case 'g': doType(VK_G); break; 
     case 'h': doType(VK_H); break; 
     case 'i': doType(VK_I); break; 
     case 'j': doType(VK_J); break; 
     case 'k': doType(VK_K); break; 
     case 'l': doType(VK_L); break; 
     case 'm': doType(VK_M); break; 
     case 'n': doType(VK_N); break; 
     case 'o': doType(VK_O); break; 
     case 'p': doType(VK_P); break; 
     case 'q': doType(VK_Q); break; 
     case 'r': doType(VK_R); break; 
     case 's': doType(VK_S); break; 
     case 't': doType(VK_T); break; 
     case 'u': doType(VK_U); break; 
     case 'v': doType(VK_V); break; 
     case 'w': doType(VK_W); break; 
     case 'x': doType(VK_X); break; 
     case 'y': doType(VK_Y); break; 
     case 'z': doType(VK_Z); break; 
     case 'A': doType(VK_SHIFT, VK_A); break; 
     case 'B': doType(VK_SHIFT, VK_B); break; 
     case 'C': doType(VK_SHIFT, VK_C); break; 
     case 'D': doType(VK_SHIFT, VK_D); break; 
     case 'E': doType(VK_SHIFT, VK_E); break; 
     case 'F': doType(VK_SHIFT, VK_F); break; 
     case 'G': doType(VK_SHIFT, VK_G); break; 
     case 'H': doType(VK_SHIFT, VK_H); break; 
     case 'I': doType(VK_SHIFT, VK_I); break; 
     case 'J': doType(VK_SHIFT, VK_J); break; 
     case 'K': doType(VK_SHIFT, VK_K); break; 
     case 'L': doType(VK_SHIFT, VK_L); break; 
     case 'M': doType(VK_SHIFT, VK_M); break; 
     case 'N': doType(VK_SHIFT, VK_N); break; 
     case 'O': doType(VK_SHIFT, VK_O); break; 
     case 'P': doType(VK_SHIFT, VK_P); break; 
     case 'Q': doType(VK_SHIFT, VK_Q); break; 
     case 'R': doType(VK_SHIFT, VK_R); break; 
     case 'S': doType(VK_SHIFT, VK_S); break; 
     case 'T': doType(VK_SHIFT, VK_T); break; 
     case 'U': doType(VK_SHIFT, VK_U); break; 
     case 'V': doType(VK_SHIFT, VK_V); break; 
     case 'W': doType(VK_SHIFT, VK_W); break; 
     case 'X': doType(VK_SHIFT, VK_X); break; 
     case 'Y': doType(VK_SHIFT, VK_Y); break; 
     case 'Z': doType(VK_SHIFT, VK_Z); break; 
     case '`': doType(VK_BACK_QUOTE); break; 
     case '0': doType(VK_0); break; 
     case '1': doType(VK_1); break; 
     case '2': doType(VK_2); break; 
     case '3': doType(VK_3); break; 
     case '4': doType(VK_4); break; 
     case '5': doType(VK_5); break; 
     case '6': doType(VK_6); break; 
     case '7': doType(VK_7); break; 
     case '8': doType(VK_8); break; 
     case '9': doType(VK_9); break; 
     case '-': doType(VK_MINUS); break; 
     case '=': doType(VK_EQUALS); break; 
     case '~': doType(VK_SHIFT, VK_BACK_QUOTE); break; 
     case '!': doType(VK_EXCLAMATION_MARK); break; 
     case '@': doType(VK_AT); break; 
     case '#': doType(VK_NUMBER_SIGN); break; 
     case '$': doType(VK_DOLLAR); break; 
     case '%': doType(VK_SHIFT, VK_5); break; 
     case '^': doType(VK_CIRCUMFLEX); break; 
     case '&': doType(VK_AMPERSAND); break; 
     case '*': doType(VK_ASTERISK); break; 
     case '(': doType(VK_LEFT_PARENTHESIS); break; 
     case ')': doType(VK_RIGHT_PARENTHESIS); break; 
     case '_': doType(VK_UNDERSCORE); break; 
     case '+': doType(VK_PLUS); break; 
     case '\t': doType(VK_TAB); break; 
     case '\n': doType(VK_ENTER); break; 
     case '[': doType(VK_OPEN_BRACKET); break; 
     case ']': doType(VK_CLOSE_BRACKET); break; 
     case '\\': doType(VK_BACK_SLASH); break; 
     case '{': doType(VK_SHIFT, VK_OPEN_BRACKET); break; 
     case '}': doType(VK_SHIFT, VK_CLOSE_BRACKET); break; 
     case '|': doType(VK_SHIFT, VK_BACK_SLASH); break; 
     case ';': doType(VK_SEMICOLON); break; 
     case ':': doType(VK_COLON); break; 
     case '\'': doType(VK_QUOTE); break; 
     case '"': doType(VK_QUOTEDBL); break; 
     case ',': doType(VK_COMMA); break; 
     case '<': doType(VK_SHIFT, VK_COMMA); break; 
     case '.': doType(VK_PERIOD); break; 
     case '>': doType(VK_SHIFT, VK_PERIOD); break; 
     case '/': doType(VK_SLASH); break; 
     case '?': doType(VK_SHIFT, VK_SLASH); break; 
     case ' ': doType(VK_SPACE); break; 
     default: 
      throw new IllegalArgumentException("Cannot type character " + character); 

OR

String code = "VK_" + ch  
Field f = KeyEvent.class.getField(code); 
int keyEvent = f.getInt(null); 

robot.press(keyEvent); 
robot.release(keyEvent); 
+0

我需要随机的字母列的内容,而不是从int 1-50。如果这是有道理的。 – DaX

+0

更新了代码 –

+0

是的,但现在我需要在robot.keyPress(KeyEvent.RANDOMNUMBERHERE)中写入它; – DaX

1

使用下面的方法做同样的

​​

更新时间:

String allchars = "abcdfhijlnpsu"; 

    char letter = allchars.charAt(rand.nextInt(allchars.length())); 
+0

这将随机化整个字母表,但我想排除一些字符。我怎么能这样做? – DaX

+0

意味着一些特定的限制字符像A到D? – NarendraR

+0

只有这将被允许“abcdfhijlnpsu”所有其他人必须被排除在外。 – DaX