| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Привязка KeyListener |
| Автор: rith2 21.10.2008, 20:05 |
| Приветствую. Сразу скажу в Java слабоват. Как понял, KeyListener необходимо привязать к какому либо компоненту. В данный момент ковыряю приложение, которые бы отслеживало нажатия, находясь в фоновом режиме (Фоновый режим обеспечивается Java Service Wrapper), то есть графический интерфейс мне не нужен, а все примерчики в гугле привязывают KeyListener к какому-либо компоненту. Ткните плиз, где почитать про это можно, либо примерчик киньте. Спасибо! |
| Автор: ecologist 22.10.2008, 08:48 |
| KeyListener привязывается к компоненту и тут увы ничего не сделать. Каждое нажатие клавиши посылается окну или компоненту в фокусе. Надо бы подробнее написать,что конкретно надосделать. Может какие-то другеи решения помогут. |
| Автор: LSD 22.10.2008, 11:49 | ||
Получать все события от клавиатуры, можно так:
но для того, чтобы это работало надо: а) чтобы приложение имело хотя бы одно видимое окно б) чтобы это окно было в фокусе. Т.е. кейлогер без использования JNI на Java не напишешь. |
| Автор: mbasil 22.10.2008, 13:21 | ||
А нельзя ли по-простому
Результат вывода: C:\Docs>java KeyboardInput f Read: 102 Read: 13 Read: 10 d Read: 100 Read: 13 Read: 10 Read: 13 Read: 10 w Read: 119 Read: 13 Read: 10 d Read: 100 Read: 13 Read: 10 c Read: 99 Read: 13 Read: 10 То есть идея в том, что перехватывать ввод от потока System.in, затем интерпретировать полученные байты. Никакой листенер в данном случае не нужен, мне кажется. |
| Автор: mbasil 22.10.2008, 13:37 |
| Тут я соврал ! В таком варианте требуется после каждого символа нажимать клавишу Enter ! Однако думаю можно попытаться перенаправить System.in |
| Автор: PashaOvechkin 22.10.2008, 14:42 |
| mbasil , а резве ето будет работать если консоь не под фокусом? |
| Автор: mbasil 22.10.2008, 15:16 |
| Не будет. Но не будет и в том случае, когда листенер в графике и приложение не фокусе. Извините за тавтологию, в том то и фокус, что приложение получает от ОС сообщения о событиях, когда оно активно. В былые времена мы просто перехватывали прерывания от мыши или клавиатуры (минуя DOS) и писали прямо в видиопамять. Замечательные были времена (социализм, понимаете !). |
| Автор: LSD 22.10.2008, 15:25 | ||
| mbasil 1. Твоё приложение перехватывает не нажатые клавиши, а то что пишется в стандартный поток ввода. И это две большие разницы. Попробуй в консоли выполнить:
2. Не оффтопь. |