Using Java to send key combinations

前端 未结 4 1554
孤独总比滥情好
孤独总比滥情好 2020-12-09 12:02

As per this previous link (How to send keyboard outputs) Java can simulate a key being pressed using the Robot class. However, how could a combination of key presses be simu

相关标签:
4条回答
  • 2020-12-09 12:19

    This code is too close to native windows keyboard. Even Api keyboard "presses" are coming into Eclipse ide as those would pressed normally from ide. Keys was produced from current debugged application!! (jdk 1.8, win 7, hp)

    0 讨论(0)
  • 2020-12-09 12:23

    For sending keys combination using java.awt.Robot the following code works fine for me

    import java.awt.AWTException;
    import java.awt.Robot;
    import java.awt.event.KeyEvent;
    
    
    
    public class VirtualKeyBoard extends Robot
    {
    
        public VirtualKeyBoard() throws AWTException
        {
            super();
        }
    
        public void pressKeys(String keysCombination) throws IllegalArgumentException
        {
                for (String key : keysCombination.split("\\+"))
                {
                    try
                    {   System.out.println(key);
                        this.keyPress((int) KeyEvent.class.getField("VK_" + key.toUpperCase()).getInt(null));
    
                    } catch (IllegalAccessException e)
                    {
                        e.printStackTrace();
    
                    }catch(NoSuchFieldException e )
                    {
                        throw new IllegalArgumentException(key.toUpperCase()+" is invalid key\n"+"VK_"+key.toUpperCase() + " is not defined in java.awt.event.KeyEvent");
                    }
    
    
                }
    
    
        }
    
    
        public void releaseKeys(String keysConbination) throws IllegalArgumentException
        {
    
                for (String key : keysConbination.split("\\+"))
                {
                    try
                    { // KeyRelease method inherited from java.awt.Robot
                        this.keyRelease((int) KeyEvent.class.getField("VK_" + key.toUpperCase()).getInt(null));
                    } catch (IllegalAccessException e)
                    {
                        e.printStackTrace();
                    }catch(NoSuchFieldException e )
                    {
                        throw new IllegalArgumentException(key.toUpperCase()+" is invalid key\n"+"VK_"+key.toUpperCase() + " is not defined in java.awt.event.KeyEvent");
                    }
                }
    
    
        }
    
        public static void main(String[] args) throws AWTException
        {
    
    
             VirtualKeyBoard kb = new VirtualKeyBoard();
    
    
             String keyCombination = "control+a"; // select all text on screen
             //String keyCombination = "shift+a+1+c"; // types A!C on screen
    
             // For your case 
             //String keyCombination = "alt+1+2+3";
    
    
             kb.pressKeys(keyCombination);
             kb.releaseKeys(keyCombination); 
    
    
    
        }
    
    
    }
    
    0 讨论(0)
  • 2020-12-09 12:24

    The simple answer is yes. Basically, you need to wrap the keyPress/Release of the Alt around the other keyPress/Releases

    public class TestRobotKeys {
    
        private Robot robot;
    
        public static void main(String[] args) {
            new TestRobotKeys();
        }
    
        public TestRobotKeys() {
            try {
                robot = new Robot();
                robot.setAutoDelay(250);
                robot.keyPress(KeyEvent.VK_ALT);
                robot.keyPress(KeyEvent.VK_1);
                robot.keyRelease(KeyEvent.VK_1);
                robot.keyPress(KeyEvent.VK_2);
                robot.keyRelease(KeyEvent.VK_2);
                robot.keyPress(KeyEvent.VK_3);
                robot.keyRelease(KeyEvent.VK_4);
                robot.keyRelease(KeyEvent.VK_ALT);
            } catch (AWTException ex) {
                ex.printStackTrace();
            }
        }
    
    }
    
    0 讨论(0)
  • 2020-12-09 12:37

    This is an example

    Robot r = new Robot();
    Thread.sleep(1000);
    
    r.keyPress(KeyEvent.VK_ALT);
    r.keyPress(KeyEvent.VK_NUMPAD1);
    r.keyPress(KeyEvent.VK_NUMPAD2);
    r.keyPress(KeyEvent.VK_NUMPAD3);            
    r.keyRelease(KeyEvent.VK_ALT);
    

    Don't forget to release some special keys, it will make some crazy things on your machine

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