使用Java发送密钥组合

根据上一个链接( 如何发送键盘输出 ),Java可以模拟使用Robot类按下的键。 但是,如何模拟按键组合? 如果我想发送组合“alt-123”这可能使用机器人吗?

简单的答案是肯定的。 基本上,您需要将AltkeyPress/Release包围在其他keyPress/Release s周围

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

这是一个例子

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

不要忘记发布一些特殊的键,它会在你的机器上做一些疯狂的事情

要使用java.awt.Robot发送密钥组合,以下代码对我来说很好

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

此代码太靠近本机Windows键盘。 甚至Api键盘“按下”也会进入Eclipse ide,因为那些正常来自ide。 Keys是从当前调试的应用程序生成的! (jdk 1.8,win 7,hp)