0

嗨,我想知道是否有一种方法可以使用机器人类制作自动打字机?有没有办法可以将字符串转换为 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;

ETC...

4

2 回答 2

0

在这里的代码有一点帮助:

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

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

于 2013-08-28T22:18:35.853 回答
0

如果您正在使用多种键盘布局,则解决方案是通过一些剪贴板操作和 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-08-29T19:21:21.573 回答