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

6 respostas Resolvido
java
Thallysson

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

staroski
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.

Thallysson

Eu teria que utilizar outra linguagem para fazer meu programa?

G

Na verdade é possivel, mas limitado, veja:

staroski

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.

staroski

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.

Thallysson

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