2012-03-26 2 views
4

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

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

Благодаря

ответ

2

От JavaDoc:

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

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

EDIT: Добавление образца:

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

Ouput на целевом окне:

aA 

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

2

На самом деле, используя Robot, вы можете удерживать клавишу для второго.

Robot r = ... 
r.keyPress(KeyEvent.VK_A); 
Thread.sleep(1000); 
r.keyRelease(KeyEvent.VK_A); 
+0

Спасибо, но это не сработает. См. Это другое сообщение об этом: http://stackoverflow.com/questions/784414/simulate-a-key-held-down-in-java, потому что делать keyPress, затем ждать, затем keyRelease, не работает, как вы ожидали бы , Другой ответ предполагает использовать другой поток для синхронизации при выдаче повторных вызовов Robot.keyPress(), но это не делает «нажатие и удержание», это просто делает много отдельных нажатий клавиш. Я пытаюсь взаимодействовать с программой, которая нуждается в событиях низкого уровня - робот не работает вообще. Поэтому я должен каким-то образом взаимодействовать с Windows API. благодаря – user1292066

Смежные вопросы