【问题标题】:How can I obtain the keypress european "è" char using Java robot class如何使用 Java 机器人类获取按键欧洲“è”字符
【发布时间】:2019-05-27 10:06:59
【问题描述】:

我正在为我的应用程序编写一个虚拟键盘,并且我正在使用 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 

【问题讨论】:

    标签: java input special-characters keypress awtrobot


    【解决方案1】:

    你要找的值是VK_DEAD_CARON,代码138

    你可以从ASCII表中找到任何与一个字符相关的值:搜索它的数值,然后你会在java中找到相关的变量KeyEvent

    另一种可能是实现custom keyboard

    【讨论】:

    • 不行,用VK_DEAD_CARON什么也打印不了
    • 能否将您用于测试的代码添加到问题中?
    • 我已将其添加到正文问题中
    • 另外一个奇怪的地方是 VK_DEAD_GRAVE (0x80) 和 VK_DEAD_BREVE (0x85) 产生相同的“ù”,就像重复...
    • 正如你所说,有些东西没有按预期工作(ù char),也许最好改变策略:尝试实现自定义键盘,看看这里 -> stackoverflow.com/a/20979488/1984767
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 2017-10-11
    相关资源
    最近更新 更多