Имитация нажатия клавиши в java для записи пользовательского ввода в другое приложение

Я разрабатываю приложение виртуальной клавиатуры. Все работает нормально, за исключением того, что все, что я когда-либо пишу, записывается в настоящее приложение, а не в то, которое отстает.

Я понял, что это потому, что класс ROBOT в java работает только для контекста приложения, которое его создает.

Есть ли обходной путь для этого?

Вот код, я пытаюсь написать ls в терминале, который стоит за моим java-приложением:

        Robot robot = new Robot();

        robot.keyPress(KeyEvent.VK_ALT);
        robot.keyPress(KeyEvent.VK_TAB);
        robot.keyRelease(KeyEvent.VK_TAB);
        robot.keyRelease(KeyEvent.VK_ALT);

        robot.keyPress('l');
        robot.keyRelease('l');
        robot.keyPress('s');
        robot.keyRelease('s');

        robot.keyPress(KeyEvent.VK_ENTER);
        robot.keyRelease(KeyEvent.VK_ENTER);

person Revanth Kumar    schedule 22.05.2015    source источник
comment
Вы ищете что-то подобное? stackoverflow.com/q/156912/1310566   -  person Simon Forsberg    schedule 03.06.2016


Ответы (1)


судя по В этом примере класс Robot может отправлять нажатия клавиш во внешние приложения, но они будут поступать в topmost window, поэтому вам в основном нужно сфокусировать окно, в которое вы хотите отправлять нажатия клавиш, кажется, существует множество решений для этого, я предполагаю, что это самое простое:

https://stackoverflow.com/a/4782350/351861:

Кроме того, вы можете написать VBScript для активации другого приложения. Например:

Set WshShell = WScript.CreateObject("WScript.Shell") 
WshShell.AppActivate("Firefox")

Затем используйте Runtime.exec из вашего Java-приложения для выполнения скрипта.

person specializt    schedule 22.05.2015
comment
Упомянутый вами пример отлично работает, когда я знаю, какое приложение будет следующим. Но в моем случае я хочу использовать это приложение в качестве замены обычной физической клавиатуре. Поэтому я должен иметь возможность перемещаться и печатать, как обычная клавиатура. - person Revanth Kumar; 22.05.2015
comment
в этом случае вам ничего не нужно, и этот вопрос недействителен, поскольку виртуальная клавиатура делает именно это - она ​​отправляет нажатия клавиш в самое верхнее приложение и ничего больше. Кстати: какое приложение будет следующим, не имеет никакого смысла. Next нет ни в каких операционных системах, только Z-индексы графических окон, тот, у которого наибольшее Z-значение, получает транслируемые события. Так работают современные операционные системы. - person specializt; 22.05.2015