Capturar click em qualquer parte da tela

15 respostas
R

Boa tarde galera estou criando uma app que tem que pegar a posição mouse em qualquer parte da tela, mas não estou conseguindo já tentei fazer assim e nada

public static void main(String[] args) {
		Toolkit.getDefaultToolkit().addAWTEventListener(new Listener(), AWTEvent.MOUSE_EVENT_MASK);  
		JFrame frame = new JFrame();  
		frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);  
		frame.setVisible(true);  
	}

	private static class Listener implements AWTEventListener {
		public void eventDispatched(AWTEvent event) {  
			System.out.print(MouseInfo.getPointerInfo().getLocation() + " | ");  
			System.out.println(event);  
		}
	}

Neste caso só funciona se eu estiver com o mouse dentro do JFrame em qualquer outra parte não funciona alguém teria alguma ideia ??
Abs.

15 Respostas

jscamara

Bom dia Robson

É necessário realizar um click dentro do seu frame para ativar o listener que você implementou, porém o seu frame não tem nenhuma dimensão

adicione o seguinte código:

frame.setSize(100, 100);

depois da instância do seu frame.

e realize um click no mesmo.

Abraços

R

Caro jscamara , acho que não fui claro eu não quero clicar em nenhum frame , mas sim em qualquer parte do sistema é como se a minha aplicação ficasse rodando em backgorund e capturando os cliks que eu fosse dando sem nenhuma janela.

Abs.

jaboot

Pra isso você precisa acessar as API´s do sistema operacional.

R

jaboot, teria alguma documentação classe ou exemplo para eu ter uma ideia de como começar ??

Abs.

Thishinoda

Talvez isso ajude: Systray com Java 6

mauricioadl

fiz um teste aqui usando as suas classes e funcionou perfeitamente. com a diferença que usei meu proprio jframe com seus botes, text, etc.

segue a saida do console:
java.awt.Point[x=156,y=45] |
java.awt.Point[x=306,y=58] |
java.awt.Point[x=306,y=58] |
java.awt.Point[x=466,y=60] |
java.awt.Point[x=466,y=60] |
java.awt.Point[x=662,y=22] |

R

Dá certo somente quando você clica dentro do Frame quando se clica fora não funciona.

quero quando clique fora do frame

mauricioadl

robson.nunes:
Dá certo somente quando você clica dentro do Frame quando se clica fora não funciona.

quero quando clique fora do frame

vc quer clicar fora da sua aplicação e funcionar, tipo esses programas hacker, eh isso?

R

Acredito que isso não seja um programa hacker…e o que eu quero é que minha aplicação fique rodando em background enquanto eu vou clicando em qualquer parte da minha tela do sistema operacional e a minha aplicação intercepte o clique do mouse e pegue a posição do ponteiro.

mauricioadl

eu disse tipo programa hacker, desses que ficam capturando eventos do SO.
isso que vc quer eh chato fazer em java, ja muitos topicos desse tipo aqui e nenhum teve solução. com certeza vai precisar usar codigo nativo em C ou coisa do tipo.
fico devendo essa, boa sorte!
se conseguir posta o codigo pra galera

abração!

R

ok mauricioadl, ninguém aqui no forum tem alguma ideia de como resolver este caso, por favor galera me ajudem.

abs.

mauricioadl

cara, fiz um teste bobo aqui e so faltou pensar um pouco. o comando:
MouseInfo.getPointerInfo().getLocation()
pega a posicao do mouse onde quer que ele esteja, soh eh preciso vc criar um thread que fica capturando a posicao dele e realizando a tarefa que vc quiser.

entendeu?

R

mauricioadl eu já fiz isso, mas a minha intenção é pegar a posição do mouse por meio do evento de click e não por um determinado tempo que a thread vai rodar.

jaboot

Então Robson, pra isso você vai ter que acessar, por exemplo, a parte do Windows que trata eventos de click do mouse, ou algo assim.
Eu nem tenho ideia por onde começar.

M

pesquise por JNA, agora capturar click do mouse é coisa de screenlogger que quer roubar senha de banco, não que seja o seu caso, mas não to vendo outra utilidade em fazer isso

Criado 7 de março de 2012
Ultima resposta 14 de mar. de 2012
Respostas 15
Participantes 6