我有问题通过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);
}
答案 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);
}
简单地说,我只是复制并粘贴角色。这适用于所有未定义的字符。 :)