Java机器人类按土耳其字母(Ö,ö,Ş,ş,Ü,ü,Ğ,ğ,İ,ı,Ç,ç,Ə,ə)?

时间:2015-01-16 10:41:56

标签: java class keycode awtrobot

我有问题通过java机器人类按特殊字母(土耳其语等)。我有一种按键的方法,可以作为alt + keycode。我无法将一些特殊字母转换为当前键码。那我怎么解决呢感谢名单

例如:

KeyStroke ks = KeyStroke.getKeyStroke('ö', 0);
 System.out.println(ks.getKeyCode());
 Output : 246
 // So alt+0246='ö'
 //but if I convert 'ş' to keycode
 //Output is 351 . So alt+351= '_' and alt+0351= '_' 
 //What is the Correct combination for 'ş'. same for 'Ş', 'ş','Ğ', 'ğ', 'İ', 'ı', 'Ə', 'ə'

按键:

public void altNumpad(int... numpadCodes) {
    if (numpadCodes.length == 0) {
        return;
    }

    robot.keyPress(VK_ALT);

    for (int NUMPAD_KEY : numpadCodes) {
        robot.keyPress(NUMPAD_KEY);
        robot.keyRelease(NUMPAD_KEY);
    }

    robot.keyRelease(VK_ALT);
}

3 个答案:

答案 0 :(得分:2)

Unicode标准中的字符编号是默认的。它们也用于HTML,因此您可以使用this table

无论如何,如果你看到源代码中的字符取决于编辑器正确解释文件的事实(首选UTF-8)。

其次,使用过的编辑器必须安装包含这些字符的字体。因此,如果您输入alt + 0351并获得' _'这可能只是一个替换字符,表示字体错过了这个字符。

最后你应该告诉Java编译器源代码是UTF-8 - 只是为了确保(javac -encoding utf8)。

答案 1 :(得分:1)

我不确定你为什么这么做

KeyStroke ks = KeyStroke.getKeyStroke('ö', 0);

因为java文档说,

public static KeyStroke getKeyStroke(Character keyChar,
                 int modifiers)
//Use 0 to specify no modifiers.

你需要将一个非0的修饰符传递给重载。

你应该尝试传递像

这样的修改
java.awt.event.InputEvent.ALT_DOWN_MASK

所以应该尝试,

KeyStroke ks = KeyStroke.getKeyStroke('ö', java.awt.event.InputEvent.ALT_DOWN_MASK);

Java doc作为参考:http://docs.oracle.com/javase/7/docs/api/javax/swing/KeyStroke.html#getKeyStroke(char)

如果你无法从中获得输出,那么你应该考虑这个字符是UTF-8的事实 在这方面,这可能会对您有所帮助,Java, Using Scanner to input characters as UTF-8, can't print text

答案 2 :(得分:0)

我知道这是一个迟到的答案,但这是我如何处理土耳其QWERTY键盘的这个问题

   static void writeRobotWrite(Robot robot, String keys) throws InterruptedException {
    ....
        try {
            robot.keyPress(keyCode);
            robot.delay(20);
            robot.keyRelease(keyCode);
            robot.delay(20);
        }catch (IllegalArgumentException e)
        {
            pressUnicode(c, robot);
        }

    }
}

基本上当我得到未定义的机器人keyCode时,我会调用pressUnicode函数:

    static void pressUnicode(char c, Robot robot)
{
    String cantRecognize = ""+c;
    StringSelection selection = new StringSelection(cantRecognize);
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    clipboard.setContents(selection, null);
    robot.keyPress(KeyEvent.VK_CONTROL);
    robot.keyPress(KeyEvent.VK_V);
    robot.keyRelease(KeyEvent.VK_V);
    robot.keyRelease(KeyEvent.VK_CONTROL);
}

简单地说,我只是复制并粘贴角色。这适用于所有未定义的字符。 :)