简体   繁体   中英

Robot's keyPress() doesn't work as should

I need help with Robot class in Java. I have the following code:

public static void main(String[] args) throws AWTException {
    Robot r = new Robot();
    r.delay(3000);
    r.keyPress(KeyEvent.VK_7);
    r.delay(5000);
    r.keyRelease(KeyEvent.VK_7);
}

From what I understand, this code has to press "7" and release it after 5 seconds. But it presses "7" and then releases it immediately. So, Robot class doesn't press and release after a while, but it fires the key once instead.

How do I make my Java application to hold a key for few seconds, then release?

So, after researching this topic closely, I have concluded that java.awt.Robot class just doesn't have the functionality to "hold" down the key.

The answer to a similar question ( Simulate a key held down in Java ), which recommended me to create a loop of constantly repeating keyPress events, didn't satisfy me, since I needed a real key-hold simulation.

I also tried using this library with no success:

Thread.sleep(3000);
Keyboard.sendKeyDown(KeyEvent.VK_7);
Thread.sleep(5000);
Keyboard.sendKeyUp(KeyEvent.VK_7);

Finally, I solved my issue via winKeyboard . But here's an important note :

I was developing a bot for a game, and was not trying to hold a key inside any text editor and see how it's continually filling the line with characters. If you'll try to test holding button within a text editor, it won't work, because text editors repeated key presses are working differently from normal keyboard events listeners in games. But it's a different topic.

Solution:

Keyboard keyboard = new Keyboard();

Thread.sleep(3000);
keyboard.winKeyPress(ScanCode.DIK_7);
Thread.sleep(5000);
keyboard.winKeyRelease(ScanCode.DIK_7);

Another thing to note is that sometimes, to make the bot work in games, you need to run your application as administrator, otherwise it might not work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM