在java中将字符转换为击键

在java中将字符转换为击键,java,unicode,awtrobot,keystrokes,Java,Unicode,Awtrobot,Keystrokes,关于这个问题,我见过类似的问题,但发生在我身上的情况有点不同; 我正在开发一个远程控制应用程序,我正在向我的计算机发送击键。 java中的Robot类只接受用于击键的VK_代码,因此我必须将非ascii字符转换为击键组合,如下所示: public void type(char character) { switch (character) { case 'a': doType(KeyEvent.VK_A); break; case 'á': doT

关于这个问题,我见过类似的问题,但发生在我身上的情况有点不同; 我正在开发一个远程控制应用程序,我正在向我的计算机发送击键。 java中的Robot类只接受用于击键的VK_代码,因此我必须将非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+数字字符(例如键入“@”字符)时,我会:

它打不出来。如果我直接用键盘输入,它就会工作。 这有什么原因吗?如何使Robot实例接受所有unicode字符而不仅仅是ascii字符?有没有更好的方法来做我正在做的事情


谢谢你的阅读,对不起我的英语

我发现问题是,我直接输入了VK_编号。 现在,使用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;
等等

case '@': doType(KeyEvent.VK_ALT,KeyEvent.VK_NUMPAD6,KeyEvent.VK_NUMPAD4); break;
case '#': doType(KeyEvent.VK_ALT,KeyEvent.VK_NUMPAD3,KeyEvent.VK_NUMPAD5); break;