Java - вызвать экранную клавиатуру - PullRequest
4 голосов
/ 14 февраля 2012

Приложение, над которым я работаю, будет работать в Windows 7. Оно будет использоваться для ввода некоторой информации через сенсорный экран. Мне нужно иметь всплывающую экранную клавиатуру всякий раз, когда у пользователя запрашивают информацию. Мой вопрос заключается в том, должен ли я создавать класс клавиатуры с нуля или использовать встроенную экранную клавиатуру Windows 7 и как вызвать ее в моем приложении Java? Спасибо

Ответы [ 2 ]

9 голосов
/ 14 февраля 2012

Я только что поиграл с экранной клавиатурой и увидел, что это легко. Вы просто должны вызвать его, используя Runtime.exec() или ProcessBuilder. Затем, если ваше приложение потеряло фокус, верните его обратно в приложение, тогда как активный элемент должен быть текущим редактируемым элементом (текстовое поле, текстовая область и т. Д.). Теперь, когда пользователь печатает на виртуальной клавиатуре, символы записываются в ваше приложение.

EDIT

Есть некоторые трудности с выполнением osk.exe из Java. Выдает IOException: java.io.IOException: Cannot run program "C:\Windows\System32\osk.exe": CreateProcess error=740, The requested operation requires elevation

Хитрость заключается в запуске команды через командную оболочку (cmd):

Runtime.getRuntime().exec("cmd /c C:\\Windows\\System32\\osk.exe");

Эта строка отлично работает на моей машине.

3 голосов
/ 17 марта 2014

Я только что столкнулся с той же проблемой, кроме того, я запускаю 32-битное приложение на 64-битной Win7. (на самом деле я использую Matlab, который основан на Java) Я использовал команду java Runtime.getRuntime().exec(....) и Matlab system(....). Поведение было таким же: экранная клавиатура не может быть запущена. Я не смог найти ни одного работающего решения в Google, поэтому я попытался объединить две идеи и обновить ответ выше:

Мое решение состояло в том, чтобы явно запустить 64-битный cmd из перенаправляющей папки sysnative (что невозможно для osk.exe, это вызывает ошибку not-found или permissions)

Runtime.getRuntime().exec('C:\windows\sysnative\cmd /c C:\Windows\system32\osk.exe');

Надеюсь, это поможет.

...