Como eu capturo o click em qualquer lugar da tela (sem foco no meu programa)?

6 respostas Resolvido
java
T

Eu estou fazendo um programa em Java e eu preciso capturar o click do mouse em qualquer lugar da tela. Eu só preciso saber se o usuário clicou. Não importa no que e nem onde, só preciso saber disso. Eu já tentei assim:

private static class Listener implements AWTEventListener {
	public void eventDispatched(AWTEvent event) {
		if (event.getID() == MouseEvent.MOUSE_CLICKED) {
			System.out.println("clicou!");
		}
	}
}

`
E daí no construtor da classe eu adiciono isso:

Toolkit.getDefaultToolkit().addAWTEventListener(
            new Listener(), AWTEvent.MOUSE_EVENT_MASK);

Porém isso só funciona se meu programa estiver em foco. Alguém sabe o que eu posso fazer?

6 Respostas

S
Solucao aceita

Com a API do Java não é possível interceptar os cliques do mouse fora de sua interface gráfica de usuário.

Você terá que usar código nativo pra tratar interrupções do mouse ou mensagem específicas do sistema operacional.

T

Eu teria que utilizar outra linguagem para fazer meu programa?

G

Na verdade é possivel, mas limitado, veja:

S

Exatamente

Você até pode continuar com o JAVA e usar JNI ou JNA, mas a parte nativa você fará em uma linguagem que gere código nativo.

S

Esse exemplo explica que você só consegue capturar o evento do mouse ao clicar fora da tela na primeira vez (é o evento que causa a perda do foco da janela).
E outro cara sugere criar uma janela transparente do tamanho da área visível do display, mas isso também não vai funcionar pois essa janela teria que funcionar como um proxy e propagar cada evento do mouse para o sistema operacional, o que só dá pra fazer com código nativo.

T

Eu preciso desta aplicação pronta o quanto antes e eu só sei o básico de C. Acho que melhor do que fazer tudo de novo seria usar JNI mesmo. Muito obrigado pela ajuda.

Criado 6 de dezembro de 2016
Ultima resposta 7 de dez. de 2016
Respostas 6
Participantes 3