如何使Java.awt.Robot类型为unicode字符? (可能吗?)

我们有一个用户提供的字符串,可能包含unicode字符,我们希望机器人键入该字符串。

如何将字符串转换为机器人将使用的keyCodes?
你是如何做到这一点它也是java版本独立(1.3 – > 1.6)?

我们为“ascii”字符工作的是

//char c = nextChar(); //char c = 'a'; // this works, and so does 'A' char c = 'á'; // this doesn't, and neither does 'Ă' Robot robot = new Robot(); KeyStroke key = KeyStroke.getKeyStroke("pressed " + Character.toUpperCase(c) ); if( null != key ) { // should only have to worry about case with standard characters if (Character.isUpperCase(c)) { robot.keyPress(KeyEvent.VK_SHIFT); } robot.keyPress(key.getKeyCode()); robot.keyRelease(key.getKeyCode()); if (Character.isUpperCase(c)) { robot.keyRelease(KeyEvent.VK_SHIFT); } } 

基于javamonkey79的代码,我创建了以下代码片段,它应该适用于所有Unicode值…

 public static void pressUnicode(Robot r, int key_code) { r.keyPress(KeyEvent.VK_ALT); for(int i = 3; i >= 0; --i) { // extracts a single decade of the key-code and adds // an offset to get the required VK_NUMPAD key-code int numpad_kc = key_code / (int) (Math.pow(10, i)) % 10 + KeyEvent.VK_NUMPAD0; r.keyPress(numpad_kc); r.keyRelease(numpad_kc); } r.keyRelease(KeyEvent.VK_ALT); } 

这将自动遍历unicode键代码的每个十年,将其映射到相应的VK_NUMPAD等效项并相应地按下/释放键。

KeyEvent类没有JRE 1.5中许多unicode类的直接映射。 如果您在Windows机器上运行它,您可能需要编写一个自定义处理程序,它执行以下操作:

 Robot robot = new Robot(); char curChar = 'Ã'; // -- isUnicode( char ) should be pretty easy to figure out if ( isUnicode( curChar ) ) { // -- this is an example, exact key combinations will vary robot.keyPress( KeyEvent.VK_ALT ); robot.keyPress( KeyEvent.VK_NUMBER_SIGN ); robot.keyRelease( KeyEvent.VK_NUMBER_SIGN ); // -- have to apply some logic to know what sequence robot.keyPress( KeyEvent.VK_0 ); robot.keyRelease( KeyEvent.VK_0 ); robot.keyPress( KeyEvent.VK_1 ); robot.keyRelease( KeyEvent.VK_1 ); robot.keyPress( KeyEvent.VK_9 ); robot.keyRelease( KeyEvent.VK_9 ); robot.keyPress( KeyEvent.VK_5 ); robot.keyRelease( KeyEvent.VK_5 ); robot.keyRelease( KeyEvent.VK_ALT ); } 

例如,弄清楚它们的关键组合是什么,然后将它们映射到某种Object(可能是HashMap?),以便以后查找和执行。

希望这可以帮助 :)

我觉得这有点晚了但是……

 Robot robot = new Robot(); robot.keyPress( KeyEvent.VK_DEAD_ACUTE); robot.keyPress( KeyEvent.VK_A ); robot.keyRelease( KeyEvent.VK_A ); robot.keyRelease( KeyEvent.VK_DEAD_ACUTE ); 

只需输入“á”

这是有效的,我在笔记本电脑中尝试相同,看起来不像帮助我使用java机器人键入unicode字符。 更多的光线。

解决模拟问题时找到的最好方法

 import java.awt.AWTException; import java.awt.Robot; public class MyRobot { public static void typeString(String s) { try { Robot robik = new Robot(); byte[] bytes = s.getBytes(); for (byte b : bytes) { int code = b; // keycode only handles [AZ] (which is ASCII decimal [65-90]) if (code > 96 && code < 123) code = code - 32; robik.delay(40); robik.keyPress(code); robik.keyRelease(code); } } catch (AWTException e){ } } } 

http://www.devdaily.com/java/java-robot-class-example-mouse-keystroke \