[RESOLVIDO] SO Event listener

4 respostas
Mikhas

Oi galera.

Gostaria de montar uma aplicação como um key logger ( porem sem propósitos maldosos ).
É possivel fazer o java “escutar” todos os KeyEvents ou MouseEvents do SO?

Se não, qual alternativas tenho. Quanto mais facil melhor… quero algo bem simples.

Valeu

4 Respostas

matheuslmota

A melhor forma de fazer isso é usando C ou C++ usando as API’s do sistema operacional. Acho que não dá pra fazer isso com Java.

Mikhas

Não tenho ideia de como fazer com C++ :confused:

Será que alguem poderia me ajudar ? Talvez criar uma interface JNI ou JNA ?

Valeu

Mikhas

Ahe galera.

Consegui utilizando a API nativa do Windows.

SEgue o codigo para quem tiver interesse:

/**
 * Provides access to User32 API
 * 
 * @author n068815 - Mikhail Domanoski
 * 
 */
public final class User32 {
	private final static User32API INSTANCE;
	public final static short KEY_PRESSED = -32767;

	private User32() {
	}

	private final static String libraryName = "User32";

	static {
		INSTANCE = (User32API) Native.loadLibrary(User32.libraryName,
				User32API.class);
	}

	public static short GetAsyncKeyState(int key) {
		return INSTANCE.GetAsyncKeyState(key);
	}
}

// Interface

interface User32API extends Library {
	short GetAsyncKeyState(int key);
}

// Classe Listener

private class KeyboardMonitorTask implements Runnable {

		public void run() {
			while (running) {
				try {
					Thread.sleep(MONITOR_INTERVAL);

					for (short key = 8; key < 256; key++) {
						if (!running)
							return;
						short state = User32.GetAsyncKeyState(key);
						if (state == User32.KEY_PRESSED) {
							notifyListeners(key);
							break;
						}
					}

				} catch (InterruptedException e) {

				}
			}
		}

	}
M

cara ta faltando coisa ai não ta?
com isso eu conseguiria fazer o seguinte, ao aperta a tela X disparar o evento da tecla Y e Z?

preciso de algo assim

Criado 30 de abril de 2012
Ultima resposta 21 de fev. de 2013
Respostas 4
Participantes 3