![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
Нужно реализовать в программе на Java возможность прослушивания какого-нибудь сочетания клавишь. Программа управляет курсором мыши, и какой-то другой возможности вернуть управление пользователю, кроме хоткея нету. Но само окно программы не в фокусе, и я так понимаю, что средствами java ловить события клавиатуры не получится. Если кто-то знает как это сделать и подскажет мне - буду очень счастлив. На данном этапе эта проблема решается у меня через "соплю": на рабочем столе ярлык к бат-файлу, на запуск ярлыка повешено сочетание клавишшь. Бат-файл создает пустой файлик в рабочем каталоге программы, java-программа видит это, ставится на паузу, возвращает управление мышью, удаляет файлик и ждет пока он снова не появится, чтобы продолжить работу. Сам проект уже почит готов, и мне очень хочется избавиться от такого неприличного метода обработки клавишь (если это вобще можно так назвать).
Я так понимаю, поможет мне только native-код. Т.к. программа нужна только под Windows, переносимость меня не волнует абсолютно. Можно ли как-то решить мою проблему с помощью JNI? Подскажите пожалуйтса. Еще как вариант, я думаю можно сделать exe, который будет заниматься перехватом кнопок и выводить текст в консоль, когда обнаружить нужное сочетание. Он будет запускаться через Process p1 = Runtime.getRuntime().exec(), далее java-код будет читать вывод этой проги с помощью p1.getInputStream() и реагировать на результат. Кто-нибудь может помочь мне в решении этой проблемы? МОжет кто-то уже что-то подобное делал и что-нибудь посоветует? |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Тут надо написать хук на клавиатуру - лучше посправшать в форумах по С/С++.
А по поводу JNI - тут скорее надо будет из хука подымать JVM и запускать свое приложение. Что вообщем-то JNI делает нормально. |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Возможно, так будет лучше:
В своём приложении создать серверый сокет и ждать когда на него пришлют определенный байт, после чего мышь отпускается. Программма на чистом C++ делает хук клавитуры и при нажатии определённой комбинации клавиш открывает клиентский сокет и посылает нужный байт. |
|||
|
||||
| SoulKeeper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 14.1.2007 Где: Ukraine, Lviv. Репутация: 11 Всего: 15 |
Поменять один костыль на другой?
В чем проблема из java программы, используя JNI, повесить хук, при выходе из этой же программы его убрать? Это сообщение отредактировал(а) SoulKeeper - 25.12.2008, 15:41 |
|||
|
||||
| Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
Нашел уже готовое решение через JNI:
http://melloware.com/products/jintellitype/index.html Работает отлично и очень легко пользоваться, так что не буду искать проблем и воспользуюсь этой библиотекой. Всем спасибо Это сообщение отредактировал(а) Temdegon - 25.12.2008, 15:56 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |