Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глобальный Hotkey 
V
    Опции темы
Temdegon
Дата 25.12.2008, 05:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.10.2008
Где: Minsk

Репутация: 7
Всего: 9



Нужно реализовать в программе на Java возможность прослушивания какого-нибудь сочетания клавишь. Программа управляет курсором мыши, и какой-то другой возможности вернуть управление пользователю, кроме хоткея  нету. Но само окно программы не в фокусе, и я так понимаю, что средствами java ловить события клавиатуры не получится. Если кто-то знает как это сделать и подскажет мне - буду очень счастлив. На данном этапе эта проблема решается у меня через "соплю": на рабочем столе ярлык к бат-файлу, на запуск ярлыка повешено сочетание клавишшь. Бат-файл создает пустой файлик в рабочем каталоге программы, java-программа видит это, ставится на паузу, возвращает управление мышью, удаляет файлик и ждет пока он снова не появится, чтобы продолжить работу. Сам проект уже почит готов, и мне очень хочется избавиться от такого неприличного метода обработки клавишь (если это вобще можно так назвать).
Я так понимаю, поможет мне только native-код. Т.к. программа нужна только под Windows, переносимость меня не волнует абсолютно. Можно ли как-то решить мою проблему с помощью JNI? Подскажите пожалуйтса. Еще как вариант, я думаю можно сделать exe, который будет заниматься перехватом кнопок и выводить текст в консоль, когда обнаружить нужное сочетание. Он будет запускаться через Process p1 = Runtime.getRuntime().exec(), далее java-код будет читать вывод этой проги с помощью p1.getInputStream() и реагировать на результат. Кто-нибудь может помочь мне в решении этой проблемы? МОжет кто-то уже что-то подобное делал и что-нибудь посоветует? smile 
PM MAIL   Вверх
AntonSaburov
Дата 25.12.2008, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Тут надо написать хук на клавиатуру - лучше посправшать в форумах по С/С++.
А по поводу JNI - тут скорее надо будет из хука подымать JVM и запускать свое приложение. Что вообщем-то JNI делает нормально.
PM MAIL WWW ICQ   Вверх
math64
Дата 25.12.2008, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Возможно, так будет лучше:
В своём приложении создать серверый сокет и ждать когда на него пришлют определенный байт, после чего мышь отпускается. Программма на чистом C++ делает хук клавитуры и при нажатии определённой комбинации клавиш открывает клиентский сокет и посылает нужный байт.
PM   Вверх
SoulKeeper
Дата 25.12.2008, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

Репутация: 11
Всего: 15



Поменять один костыль на другой?

В чем проблема из java программы, используя JNI, повесить хук, при выходе из этой же программы его убрать?

Это сообщение отредактировал(а) SoulKeeper - 25.12.2008, 15:41
PM MAIL   Вверх
Temdegon
Дата 25.12.2008, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.10.2008
Где: Minsk

Репутация: 7
Всего: 9



Нашел уже готовое решение через JNI:
http://melloware.com/products/jintellitype/index.html
Работает отлично и очень легко пользоваться, так что не буду искать проблем и воспользуюсь этой библиотекой.
Всем спасибо

Это сообщение отредактировал(а) Temdegon - 25.12.2008, 15:56
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0426 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.