首页 > 解决方案 > 如何使用 Java 机器人类获取按键欧洲“è”字符

问题描述

我正在为我的应用程序编写一个虚拟键盘,并且我正在使用 Java 机器人来模拟每个键盘按钮的按键事件。一切都是正确的,除了我找不到欧洲特殊字符的键码,特别是意大利字符。扫描所有可能的代码,我发现:

à is KeyEvent.VK_DEAD_ABOVERING
ì is KeyEvent.VK_DEAD_CIRCUMFLEX
ò is KeyEvent.VK_DEAD_CEDILLA
ù is KeyEvent.VK_DEAD_GRAVE

但我错过了“è”的键码,看起来好像没有代码可以产生这个字符。

我也已经尝试使用打印出物理键盘上按下的每个键的工具来获取丢失的代码,但是对于上述每个字符(包括“è”),我都得到“未知”。

这是一段代码来测试它

package robottest;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;

public class RobotTest {

    private static Robot robot;

    public static void main(String[] args) {
        // TODO code application logic here
        try {
            robot = new Robot();
            int keyCode = KeyEvent.VK_DEAD_CARON;
            robot.keyPress(keyCode);
            robot.keyRelease(keyCode);

        } catch (AWTException ex) {
            System.out.println("Exception"+ex);
        }
    }
}

它是最小的,你可以编译它并运行

java -jar RobotTest.jar

这是我修改源代码以充当一种“代码扫描仪”的内容...

package robottest;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import javafx.scene.input.KeyCode;

public class RobotTest {

    private static Robot robot;

    public static void main(String[] args) {
        // TODO code application logic here
        try {
            robot = new Robot();
/*            int keyCode = KeyEvent.VK_DEAD_BREVE;
            robot.keyPress(keyCode);
            robot.keyRelease(keyCode);                
*/
            for (int keyCode = KeyEvent.VK_DEAD_GRAVE; keyCode <KeyEvent.VK_DEAD_GRAVE+20; keyCode++) {
                System.out.print("Code "+keyCode+" ");
                robot.keyPress(keyCode);
                robot.keyRelease(keyCode);         
                System.out.println("");                
            }

        } catch (AWTException ex) {
            System.out.println("Exception"+ex);
        }
    }
}

输出是:

Code 128 ù
Code 129 ,
Code 130 ì
Code 131 3
Code 132 -
Code 133 ù
Code 134 
Code 135 .
Code 136 à
Code 137 2
Code 138 
Code 139 ò
Code 140 0
Code 141 
Code 142 
Code 143 
Code 144 
Code 145 
Code 146 
Code 147 

标签: javainputspecial-characterskeypressawtrobot

解决方案


您正在寻找的价值是VK_DEAD_CARON,代码138

您可以从ASCIItable 开始找到与字符关联的任何值:搜索其数值,然后您将在 java 中找到关联的变量KeyEvent

另一种可能性是实现自定义键盘


推荐阅读