Я хочу сделать простую java-программу, которая вставляет некоторый текст в текущую позицию курсора. Эта позиция курсора может быть в любом текстовом редакторе, например в блокноте. Это возможно?Явная вставка в текущую позицию курсора
ответ
Это взломать, но посмотрите на java.awt.Robot. Он позволяет программным образом делать щелчки мыши и нажатия клавиш, среди множества других полезных вещей. Так один из способов сделать это будет:
- статья Используйте Atmocreations', чтобы поместить текст в буфер обмена
- Если вы хотите, чтобы вставить его, используйте робота, чтобы нажать на текущей позиции (если вам нужно дать что поле фокус)
- Использование роботов нажать Ctrl-V (или любой другой система ожидает пасты)
Как я уже сказал, это совсем не чистое решение, но он будет работать в крайнем случае.
Использование this article в качестве основы о копировании/вставке, вы можете увидеть, что вы можете только поместить что-то в буфер обмена, но не напрямую изменять содержимое текстового поля внешнего процесса.
Возможно, вы захотите получить дескриптор окна окна и отправить ему сообщение с помощью Windows API. Это работает только на Windows, я не знаю, есть ли эквивалентный способ для Mac OS/Linux. Возможно, это даже не работает непосредственно из java. Вам потребуется ввести некоторые C/C++ - код и использовать Java Native Interface (JNI)
приветы
спасибо. Я попробую с JNI – dede
Если и просят для текущего местоположения курсора, я думаю, и должны использовать это:
Display.getCurrent().getCursorLocation()
Имея местоположение курсора, что делать дальше, требует дальнейших подробностей. Если вы хотите автоматически записать текст в зарубежные приложения, такие как Word или Notepad, это звучит скорее как вирус для меня.
Да, я хочу писать в любой текстовый редактор (например, Блокнот), и я делаю что-то вроде утилиты буфера обмена (аналогично http://www.deepskyblue.net/software/sanvient/en/) , Я не могу понять, как эта программа может писать любой текстовый ввод. – dede
Я использую: robot = new Robot(); \t robot.keyPress (KeyEvent.VK_CONTROL); robot.keyPress (KeyEvent.VK_V); robot.keyRelease (KeyEvent.VK_V); robot.keyRelease (KeyEvent.VK_CONTROL); и он работает. Благодарю. P.S. Я попытался с robot.keyRelease (KeyEvent.VK_PASTE); но он вызывает ошибку – dede
@peri: это работает, даже если фокус находится в другом окне? – Atmocreations
нет, он работает только для окна в фокусе – dede