我见过关于这个问题的类似问题,但发生在我身上的情况有点不同; 我正在开发一个远程控制应用程序,我正在向我的计算机发送击键。 java中的Robot类只接受VK_CODES键击,因此我必须将非ascii字符转换为击键组合,如下所示:
public void type(char character) {
switch (character) {
case 'a': doType(KeyEvent.VK_A); break;
case 'á': doType(KeyEvent.VK_A); break;
case 'à': doType(KeyEvent.VK_A); break;
case 'ä': doType(KeyEvent.VK_A); break;
case 'â': doType(KeyEvent.VK_A); break;
case 'b': doType(KeyEvent.VK_B); break;
case 'c': doType(KeyEvent.VK_C); break;
case 'd': doType(KeyEvent.VK_D); break;
case '{': doType(KeyEvent.VK_SHIFT, KeyEvent.VK_OPEN_BRACKET); break;
case '}': doType(KeyEvent.VK_SHIFT, KeyEvent.VK_CLOSE_BRACKET); break;
case '|': doType(KeyEvent.VK_SHIFT, KeyEvent.VK_BACK_SLASH); break;
etc...
}
private void doType(int... keyCodes) {
doType(keyCodes, 0, keyCodes.length);
}
private void doType(int[] keyCodes, int offset, int length) {
if (length == 0) {
return;
}
robot.keyPress(keyCodes[offset]);
doType(keyCodes, offset + 1, length - 1);
robot.keyRelease(keyCodes[offset]);
}
这很好用,但是当我尝试组合ALT +数字字符(例如输入'@'字符)时,我会这样做:
case '@': doType(KeyEvent.VK_ALT,KeyEvent.VK_6,KeyEvent.VK_4); break;
不会输入它。如果我直接用键盘输入它,它就可以了。 是否有一个原因?如何使Robot实例接受所有unicode字符而不仅仅是ascii?有没有更好的方法来做我正在做的事情?
感谢阅读并抱歉我的英语!
答案 0 :(得分:0)
我发现问题是,我直接进入了VK_number。 现在它就像使用VK_NUMPAD键的魅力一样:
case '@': doType(KeyEvent.VK_ALT,KeyEvent.VK_NUMPAD6,KeyEvent.VK_NUMPAD4); break;
case '#': doType(KeyEvent.VK_ALT,KeyEvent.VK_NUMPAD3,KeyEvent.VK_NUMPAD5); break;
等。