KeyEvent.VK_MINUS 被 Java 机器人解释为德语“ß”

KeyEvent.VK_MINUS interpreted as German 'ß' by Java Robot

以下代码将导致在 MAC OSX 10.10 和 Java 7 上键入“ß”而不是“-”。有关如何解决此问题的任何想法是欢迎。

public static void main(String[] args) {
        try {

            String cmd = "open /Applications/TextEdit.app";
            Runtime.getRuntime().exec(cmd);

            Robot robot = new Robot();

            robot.delay(2000);
            robot.keyPress(KeyEvent.VK_MINUS);
            robot.keyRelease(KeyEvent.VK_MINUS);

        } catch (AWTException | IOException e) {
            e.printStackTrace();
        }
    }

没有明确说明,但 the Javadoc for the keyPress method 是用 "keycodes" 表达的,这通常意味着它映射到 上的特定物理键 键盘,然后操作系统将其解释为某个键事件(例如 "hyphen" 或 "double S")。

The standard German layout 在退格键左边两个键上有双 S,这是 QWERTY 键盘上的 hyphen/minus。

至于如何解决这个问题,你显然需要了解键盘布局。 a library called Window Licker 应该可以处理机器人的布局问题。