Como pegar a posição x,y do cursor do mouse?

7 respostas
Avelino7

Olá Pessoal,

Sempre tenho acompanhado o GUJ, e nunca houve a necessidade de fazer um tópico, pois o Fórum é limpo e organizado, e sempre encontrei o que procurava....

Eu sou iniciante em Java, e estou fazendo um programa para fins de estudos, dei uma pesquisada no Fórum e não encontrei solução p/ o meu problema...

Bem, o programa tem como objetivo inicial, renovar os meus livros da biblioteca, para isso, estou usando a Classe robot.

Para renovar os livros, tenho que clicar em uma imagem, e para fazer isso, tenho que levar o cursor do mouse até a imagem e clicar...
Eu consegui um trecho de código que faz isso, mas tenho que por nos parâmetros a posição em pixel...

Eu consegui fazer isso por tentativa de erro, até acertar o bendito pixel onde fica a imagem...

Aqui o meu problema:

Quero fazer essa aplicação com interface gráfica, e preciso encontra a posição do cursor do mouse.

Quero saber se tem algum jeito de fazer isso?

Gostaria que nessa hora, o cursor do mouse alterasse para um ícone de um "+"

Não sei se fui bem claro, ou se coloquei o Tópico no Lugar errado, mas preciso desse auxilio, conto com a ajuda de vocês !

Aqui o código:

package robo;

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;

public class Robo {

    public static void main(String[] args) throws IOException, AWTException, URISyntaxException, NativeException, IllegalAccessException {
        Robot robot = new Robot();

        //Esse é o Array onde vai estar os eventos de teclado, mude os números p/ o seu login da Biblioteca
        int login[] = {
            KeyEvent.VK_2,
            KeyEvent.VK_3,
            KeyEvent.VK_7,
            KeyEvent.VK_5,
            KeyEvent.VK_5,
            KeyEvent.VK_1};
        //Aqui vai sua senha 
        int senha[] = {
            KeyEvent.VK_1,
            KeyEvent.VK_2,
            KeyEvent.VK_3,
            KeyEvent.VK_4,
            KeyEvent.VK_5,
            KeyEvent.VK_6,
            KeyEvent.VK_7,
            KeyEvent.VK_8,
            KeyEvent.VK_9,
            KeyEvent.VK_0};

        //Bloquear teclado e mouse
        JNative bloquear = new JNative("User32", "BlockInput");
        bloquear.setRetVal(Type.INT);
        bloquear.setParameter(0, "Blk");
        bloquear.invoke();
        int ret = bloquear.getRetValAsInt();
        System.out.println("Trava" + ret);
        //Aqui termina o Bloqueio do TECLADO E MOUSE !

        //Aqui abre-se a Janela de Login da Biblioteca
        java.awt.Desktop.getDesktop().browse(new URI("endereço URL da biblioteca"));
        //Delay para esperar o navegador abrir junto com a janela...
        robot.delay(15000);

        //Um For para percorrer as posiçoes do Array
        for (int i = 0; i < login.length; i++) {
            //Aperte o botão cnt
            robot.keyPress(login[i]);
            //Espere meio segundo
            robot.delay(500);
        }
        //Percorreu tudo? de um tab p/ ir p/ próxima linha.
        robot.keyPress(KeyEvent.VK_TAB);
        //Espere um segundo.
        robot.delay(1000);
        //Digite a senha
        for (int j = 0; j < senha.length; j++) {
            robot.keyPress(senha[j]);
            robot.delay(500);
        }
        //De um enter para logar !
        robot.keyPress(KeyEvent.VK_ENTER);
        //Vá para renovaçao.
        java.awt.Desktop.getDesktop().browse(new URI("endereço da renovação da biblioteca"));
        //Delay p/ esperar o navegador abrir a pagina...vai que... 10segundos
        robot.delay(10000);
        
        //Coloque o valor de i = Número de livros que você emprestou.
        int i=5,x=0;
        while(x<=i){
        robot.keyPress(KeyEvent.VK_TAB);
        robot.delay(1500);
        x++;       
        }
        robot.delay(2000);
        //Dê um espaço para selecionar (acho que enter funciona tambem)
        robot.keyPress(KeyEvent.VK_SPACE);

        try {
            //Aqui temos problemas !
            //Mova o mouse para a posição....[ Pode variar de acordo com a resolução da tela. =/ ]
            robot.mouseMove(150, 480);
            //Espere 2 segundos
            robot.delay(2000);
            //Aperta o botão do mouse
            robot.mousePress(InputEvent.BUTTON1_MASK);
            //Solta o botão do mouse (necessário)
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
        //Espere 2 segundos
        robot.delay(2000);
        //Desbloqueie o TECLADO e o MOUSE
        bloquear.setParameter(0, 0);
        //FIM - 
    }
}

Fiquem a vontade para criticar, e dar sugestões de melhorias para ele...Estou aqui para aprender ^^

7 Respostas

Avelino7

Estou usando o JNative p/ bloquear o teclado e mouse, você pode baixar aqui:

http://downloads.sourceforge.net/project/jnative/jnative/1.4-RC2/JNative.jar?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fjnative%2F&ts=[telefone removido]&use_mirror=ufpr

InicianteJavaHenriqu

Vê se te ajuda :arrow: http://www.guj.com.br/java/44122-captura-de-posicao-do-mouse-fora-de-um-jframe

:thumbup:

Avelino7

Vlw, é bem útil, mas tem que ser fora do JFrame…

Tenho que capturar a posição do cursor em um botão do navegador…(da página web)

Seria um programa como um bot, que automatizasse a navegação sabe?

Mesmo assim, bem grato…ele vai me servir para uma outra aplicação. ^^

Deixo aqui o código de registro no post:

Point p = new Point(); p = MouseInfo.getPointerInfo().getLocation(); //Captura a posição do mouse dentro de um JFrame

InicianteJavaHenriqu

Tem este daqui também :arrow: http://www.guj.com.br/java/258963-usando-a-classe-robot---pequeno-exemplo-desligando-pc--resolucao-de-tela-1024-por-768-pixels

:thumbup:

E

O que as pessoas normalmente fazem, em vez de ficar tentando localizar uma figura em uma página (que é algo terrivelmente não-trivial, e que quebra no segundo em que o cara atualiza o site para incluir figurinhas mais bonitinhas :frowning: ), é fazer uma de duas coisas:

a) Você pode usar algum programa daqueles que servem como proxy e servem para você testar web services, ver que tipos de comandos (GET, PUT) a página que você quer automatizar está mandando para o web server, e repetir tais comandos.

b) Escrever uma extensão ao navegador (por exemplo, digamos que seu navegador seja o Firefox). Ele tem acesso ao DOM da sua página web, e pode efetuar os submits adequados para o que você precisa fazer (clicar em um determinado link da página).

E

NOte que isso também quebra quando o rapaz que toma conta do sistema Web resolve atualizar o sistema, mas esse é um risco que você corre.

Avelino7

Como posso fazer isso usando o Firefox?

Ferramentas>Desenvolvedor Web>Console da Web ??

Seria isto?

(Vlw pelas dicas, :smiley: )

Criado 27 de maio de 2012
Ultima resposta 28 de mai. de 2012
Respostas 7
Participantes 3