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

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:

[code]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 - 
}

}
[/code]

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

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=1338150687&use_mirror=ufpr

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

:thumbup:

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

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:

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

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.

Como posso fazer isso usando o Firefox?

Ferramentas>Desenvolvedor Web>Console da Web ??

Seria isto?

(Vlw pelas dicas, :smiley: )