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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Привязка KeyListener 
:(
    Опции темы
rith2
Дата 21.10.2008, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Приветствую.

Сразу скажу в Java слабоват.
Как понял, KeyListener необходимо привязать к какому либо компоненту. В данный момент ковыряю приложение, которые бы отслеживало нажатия, находясь в фоновом режиме (Фоновый режим обеспечивается Java Service Wrapper), то есть графический интерфейс мне не нужен, а все примерчики в гугле привязывают KeyListener к какому-либо компоненту. Ткните плиз, где почитать про это можно, либо примерчик киньте. Спасибо!
PM MAIL   Вверх
ecologist
Дата 22.10.2008, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



KeyListener привязывается к компоненту и тут увы ничего не сделать. Каждое нажатие клавиши посылается окну или компоненту в фокусе.

Надо бы подробнее написать,что конкретно надосделать. Может какие-то другеи решения помогут.
PM MAIL   Вверх
LSD
Дата 22.10.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Получать все события от клавиатуры, можно так:
Код

Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
  public void eventDispatched(AWTEvent event) {
    KeyEvent keyEvent = (KeyEvent) event;
    ...
  }
}, AWTEvent.KEY_EVENT_MASK);

но для того, чтобы это работало надо:
а) чтобы приложение имело хотя бы одно видимое окно
б) чтобы это окно было в фокусе.

Т.е. кейлогер без использования JNI на Java не напишешь.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
mbasil
Дата 22.10.2008, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 13



А нельзя ли по-простому
Код

import java.io.*;

public class KeyboardInput {
 public static void main (String args[]) {
     System.out.println("Unix: Type ctrl-d to exit."
                      + "\nWindows: Type ctrl-c to exit");
       InputStream is = System.in;
   try {
         int k = is.read();
         while ( true ) {
              // Здесь интерпретируем ввод вместо System.out.println
              // правда консоль должна "висеть" это - минус
              System.out.println("Read: " + k );
              k = is.read();
          }
     } catch (IOException e) {
        e.printStackTrace();
     }
  }
}

Результат вывода:

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:28
PM MAIL   Вверх
mbasil
Дата 22.10.2008, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 13



Тут я соврал !  В таком варианте требуется после каждого символа нажимать клавишу Enter !
Однако думаю можно попытаться перенаправить System.in 
PM MAIL   Вверх
PashaOvechkin
Дата 22.10.2008, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 1.4.2007
Где: Riga, Latvia

Репутация: 2
Всего: 4



mbasil , а резве ето будет работать если консоь не под фокусом? 
PM MAIL Skype   Вверх
mbasil
Дата 22.10.2008, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 13



Не будет. Но не будет и в том случае, когда листенер в графике и приложение не фокусе.
Извините за тавтологию, в том то и фокус, что приложение получает от ОС сообщения о событиях, когда оно активно.
В былые времена мы просто перехватывали прерывания от мыши или клавиатуры (минуя DOS) и писали прямо в видиопамять. Замечательные были времена (социализм, понимаете !). 
PM MAIL   Вверх
LSD
Дата 22.10.2008, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



mbasil
1. Твоё приложение перехватывает не нажатые клавиши, а то что пишется в стандартный поток ввода. И это две большие разницы. Попробуй в консоли выполнить:
Код

type KeyboardInput.java | java KeyboardInput

2. Не оффтопь.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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