2012-03-22 57 views
2

我一直在尝试从awt使用机器人,在应用程序上输入一些文本。问题是我无法输入任何字母,例如ê,à或á。 我已经尝试过这样的打印^ e例如,但即使这样做,它只是没有打印任何东西VK_CIRCUMFLEX口音与机器人按键

不知道它是否重要,但我在Mac上测试。

任何帮助都会好起来的。

+1

代替千言万语http://stackoverflow.com/questions/397113/how-to-make-the-java-awt-robot-type-unicode-characters-is-it-possible – mishadoff 2012-03-22 00:30:32

+0

试过所有该帖子的答案没有解决我的问题...但赞赏评论。谢谢 – 2012-03-22 01:41:50

回答

3

您可以使用剪贴板结合CTRL/COMMAND + V为您完成这项工作。下面的代码至少在Windows上工作(Mac键组合可能需要不同的顺序来粘贴)。

public static void main(String[] args) throws AWTException { 
    String osName = System.getProperty("os.name");   
    boolean isOSX = osName.startsWith("Mac OS X"); 
    boolean isWin = osName.startsWith("Windows"); 

    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 
    StringSelection str = new StringSelection("Héllõ Wörld"); 
    clipboard.setContents(str, str); 
    Robot robot = new Robot(); 

    if (isMac) { 
     // ⌘-V on Mac 
     robot.keyPress(KeyEvent.VK_META); 
     robot.keyPress(KeyEvent.VK_V); 
     robot.keyRelease(KeyEvent.VK_V); 
     robot.keyRelease(KeyEvent.VK_META);   
    } else if (isWin) { 
     // Ctrl-V on Win 
     robot.keyPress(KeyEvent.VK_CONTROL); 
     robot.keyPress(KeyEvent.VK_V); 
     robot.keyRelease(KeyEvent.VK_V); 
     robot.keyRelease(KeyEvent.VK_CONTROL); 
    } else { 
     throw new AssertionError("Not tested on "+osName); 
    } 
} 
+0

不错,工作。但我不确定它是否解决了我的问题。我想我必须发送每个字符的按键来解决我的问题。 – 2012-03-22 03:23:00

+0

,我需要更改为VK_META而不是VK_CONTROL才能在mac上工作。您可以将其添加到您的答案 – 2012-03-22 03:25:27

+0

已更新。我还没有在我的Mac上进行测试,但现在应该更接近了。如果您需要每个角色的按键事件,那么您可能能够避免在每次点击⌘-V时使用新角色更新剪贴板内容。 – 2012-03-22 04:30:29