【问题标题】:Java auto typer with robot class?带有机器人类的Java自动打字机?
【发布时间】:2013-08-28 21:38:11
【问题描述】:

您好,我想知道是否有一种方法可以使用机器人类制作自动打字机? 有没有办法可以将字符串转换为 char[] 并输入每个字母? 无论如何,我可以为每个字母使用一个大小写(下面的示例)。

        case ' ': key = "VK_SPACE"; shiftOn = false; break;
        case 'a': key = "VK_A"; shiftOn = false;    break;
        case 'b': key = "VK_B"; shiftOn = false;    break;
        case 'c': key = "VK_C"; shiftOn = false;    break;
        case 'd': key = "VK_D"; shiftOn = false;    break;
        case 'e': key = "VK_E"; shiftOn = false;    break;
        case 'f': key = "VK_F"; shiftOn = false;    break;
        case 'g': key = "VK_G"; shiftOn = false;    break;
        case 'h': key = "VK_H"; shiftOn = false;    break;
        case 'i': key = "VK_I"; shiftOn = false;    break;
        case 'j': key = "VK_J"; shiftOn = false;    break;
        case 'k': key = "VK_K"; shiftOn = false;    break;
        case 'l': key = "VK_L"; shiftOn = false;    break;

等等……

【问题讨论】:

  • 使用toCharArray将字符串转换为char[]:docs.oracle.com/javase/7/docs/api/java/lang/…
  • 是的,而且很乱。查看this example。这使用了两种不同的方法。一种是直接注入事件队列,另一种是发出机器人,但它使用相同的过程来生成密钥序列
  • static char[] getCharArray(String stringName) { return stringName.toCharArray(); } 将字符串转换为 char[] 怎么样?
  • 这里有一个similar question 的简单解决方案。

标签: java awtrobot


【解决方案1】:

在代码here的帮助下:

    Thread.sleep(2000); // Give me time to open up notepad
    Robot r = new Robot();
    for (char c : "I like playing with fire, and Java.".toCharArray()) {
        int code = KeyEvent.getExtendedKeyCodeForChar(c);
        if (Character.isUpperCase(c))
            r.keyPress(KeyEvent.VK_SHIFT);
        r.keyPress(code);
        r.keyRelease(code);
        if (Character.isUpperCase(c))
            r.keyRelease(KeyEvent.VK_SHIFT);
    }

你需要做更多的工作才能让像 !@#$%&*()_+ 这样的字符正常工作。

【讨论】:

  • 我最好需要冒号和感叹号才能工作,我怎样才能让它们工作?
【解决方案2】:

如果您使用多种键盘布局,解决方案是通过一些剪贴板操作和 Ctrl + V 键来粘贴每个字符;否则,您可能会得到错误的结果,例如无法在巴西键盘中输入斜杠(我前一阵子遇到的问题)。 如果没有,您可以使用 sbat 的解决方案。我的只是一种解决方法,即所有键盘的键码都不相同,但因此工作速度较慢(我认为)。

public static void paste(String text) throws Exception {
    Robot rob = new Robot(); //Robot for typing
    Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); //Clipboard
    old = (String) c.getData(DataFlavor.stringFlavor); //Clipboard contents before function
    for (int i = 0; i < text.length(); i++) {
        c.setContents(new StringSelection("" + text.charAt(i)), null); //Set clipboard

        //Ctrl + V
        rob.keyPress(KeyEvent.VK_CONTROL); 
            rob.keyPress(KeyEvent.VK_V);
            rob.keyRelease(KeyEvent.VK_V);
        rob.keyRelease(KeyEvent.VK_CONTROL);
    }
    c.setContents(new StringSelection(old), null); //Restore old clipboard contents
}

【讨论】:

    猜你喜欢
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 2017-03-26
    • 2013-03-08
    • 1970-01-01
    • 2015-04-13
    相关资源
    最近更新 更多