Использование JNA или JNI для имитации клавиш, удерживаемых в Windows - PullRequest
4 голосов
/ 26 марта 2012

Я хочу симулировать нажатие клавиш в Java.Другие пробовали это с помощью робота.Это позволяет только атомарное нажатие клавиши, где я хочу смоделировать удержание клавиши (скажем, на секунду) и отпустить.Итак, мне нужно использовать JNA или JNI.

Я исследовал JNative, но это похоже на то, что он потребляет ключевые события на уровне ОС, а не генерирует их на уровне ОС.Как я могу генерировать такие события из Java?

Спасибо

Ответы [ 2 ]

2 голосов
/ 26 марта 2012

На самом деле, с помощью робота вы можете удерживать клавишу в течение секунды.

Robot r = ...
r.keyPress(KeyEvent.VK_A);
Thread.sleep(1000);
r.keyRelease(KeyEvent.VK_A);
2 голосов
/ 26 марта 2012

Из JavaDoc:

void java.awt.Robot.keyPress(int keycode)

Presses a given key. The key should be released using the keyRelease method. 

РЕДАКТИРОВАТЬ: Добавление образца:

    Robot robot = new Robot();
    System.out.println("You have 2 seconds to jump to the target window...");
    Thread.sleep(2000);
    robot.keyPress( KeyEvent.VK_A);
    robot.keyRelease( KeyEvent.VK_A);
    robot.keyPress( KeyEvent.VK_SHIFT);
    robot.keyPress( KeyEvent.VK_A);
    robot.keyRelease( KeyEvent.VK_SHIFT);
    robot.keyRelease( KeyEvent.VK_A);
    Thread.sleep(2000);

Выход в целевом окне:

    aA

(я знаю этоэто не то, что вам нужно, но я добавил его для будущих читателей в качестве справки, чтобы они не думали, что в JavaDoc или Robot есть ошибка)

...