Java模拟发送键盘消息 shift组合键

来源:互联网 发布:linux启动过程详解 图 编辑:程序博客网 时间:2024/06/04 17:51

Java中可通过java.awt.Robot来模拟发送消息:键盘消息,鼠标消息之类的。

先来试试

Robot robot = new Robot();robot.keyPress(KeyEvent.VK_CONTROL);robot.keyPress(KeyEvent.VK_ALT);robot.keyPress(KeyEvent.VK_RIGHT);robot.keyRelease(KeyEvent.VK_RIGHT);robot.keyRelease(KeyEvent.VK_ALT);robot.keyRelease(KeyEvent.VK_CONTROL);

成功的执行了QQMusic的下一首:Ctrl+Alt+Right

再来试试Kuwo的下一首:Ctrl+Shift+Right

Robot robot = new Robot();robot.keyPress(KeyEvent.VK_CONTROL);robot.keyPress(KeyEvent.VK_SHIFT);robot.keyPress(KeyEvent.VK_RIGHT);robot.keyRelease(KeyEvent.VK_RIGHT);robot.keyRelease(KeyEvent.VK_SHIFT);robot.keyRelease(KeyEvent.VK_CONTROL);

狂点。。。没反应,难道不支持Shift键,google之

http://www.webdeveloper.com/forum/showthread.php?t=221722

这位仁兄遇到了相同的问题,不过是在四五年前了,他没有给出解决方案,只是给了一个记录键盘消息的代码,通过这段代码发现:按下SHIFT后,再按Right,会触发SHIFT的release事件和Right的press事件,难道是Java的bug,继续google之

https://forums.oracle.com/forums/thread.jspa?threadID=2230592

另一位仁兄也遇到了这个问题,看来吾道不孤也,而且还是前几个月发生的事情。在他那里,有人指出了问题之所在,这还真是Java的Bug

Bug 4908075
Bug 6463168

让人费解的是bug已经提交N年了,还是没有修复。

还好,有方法可以绕过这个bug:turn off the numlock keys

Toolkit.getDefaultToolkit().setLockingKeyState(KeyEvent.VK_NUM_LOCK, false);

这样,就解决了发送组合键消息时,Shift不能和其他键同时按下的问题。

http://weblogs.java.net/blog/joshy/archive/2003/08/swinghack_keybo.html

后来发现,方法原来是有一位仁兄提供的,忽略了,不过网址没登上去。

就此停笔了。。。


原创粉丝点击