从java中的任意char获取VK int

P. *_*ore 8 java keyboard unit-testing awtrobot fest

你如何从一个字母的字母中获取VK代码?看起来你应该能够做类似的事情javax.swing.KeyStroke.getKeyStroke('c').getKeyCode(),但这不起作用(结果为零).如果您已经拥有KeyEvent,每个人都知道如何获取密钥代码,但如果您只想将字符转换为VK整数,该怎么办?我对获取奇怪字符的FK代码不感兴趣,只有[AZ],[az],[0-9].

这个问题的背景--------我见过的所有机器人教程都假设程序员喜欢通过发送带有VK代码的按键来拼出单词:

int keyInput[] = {
      KeyEvent.VK_D,
      KeyEvent.VK_O,
      KeyEvent.VK_N,
      KeyEvent.VK_E
  };//end keyInput array
Run Code Online (Sandbox Code Playgroud)

叫我懒惰,但即使使用Eclipse,也无法在GUI上使用TDD.如果有人碰巧知道一个类似于机器人的类,它接受字符串,然后模拟这些字符串的用户输入(我正在使用FEST),我很想知道.

pR0*_*0Ps 6

AWTKeyStroke.getAWTKeyStroke('c').getKeyCode();
Run Code Online (Sandbox Code Playgroud)

稍微澄清了佩斯的回答.它应该是单引号(表示字符),而不是双引号(表示字符串).

使用双引号将抛出java.lang.IllegalArgumentException(String格式不正确).


小智 5

也许这个丑陋的黑客:

Map<String, Integer> keyTextToCode = new HashMap<String, Integer>(256);
Field[] fields = KeyEvent.class.getDeclaredFields();
for (Field field : fields) {
    String name = field.getName();
    if (name.startsWith("VK_")) {
        keyTextToCode.put(name.substring("VK_".length()).toUpperCase(),
                          field.getInt(null));
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,keyTextToCode将包含从字符串(例如"A"或"PAGE_UP")到vk代码的映射.