How to make the Java.awt.Robot type unicode characters? (Is it possible?)

前端 未结 4 748
隐瞒了意图╮
隐瞒了意图╮ 2020-11-29 10:09

We have a user provided string that may contain unicode characters, and we want the robot to type that string.

How do you convert a string into keyCodes that the rob

相关标签:
4条回答
  • 2020-11-29 10:59

    i think this is a bit late but...

    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 );
    

    that just type an "á"

    0 讨论(0)
  • 2020-11-29 11:04

    Based on javamonkey79's code I've created the following snippet which should work for all Unicode values...

    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);
    }
    

    This automatically goes through each decade of the unicode key-code, maps it to the corresponding VK_NUMPAD equivalent and presses/releases the keys accordingly.

    0 讨论(0)
  • 2020-11-29 11:05

    The KeyEvent Class does not have direct mappings for many unicode classes in JRE 1.5. If you are running this on a Windows box what you may have to do is write a custom handler that does something like this:

    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 );
    }
    

    e.g. Figure out what they key combinations are, and then map them to some sort of Object (maybe a HashMap?) for later lookup and execution.

    Hope this helps :)

    0 讨论(0)
  • 2020-11-29 11:13

    The best way that i find when solve simulare problem

    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 [A-Z] (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\

    0 讨论(0)
提交回复
热议问题