Nasłuch myszy

0

Chcę napisać program, który nasłuchiwał by zdarzeń od myszki w obrębie całego ekranu. Dokładniej mówiąc w momencie wykrycia wciśnięcia lub zwolnienia przycisku myszy rejestrował by współrzędne kursora, rodzaj zdarzenia{press, release} i jego czas.

Cały problem w tym, że nie wiem jak dostać się do takich zdarzeń. Gdyby chodziło o zdarzenia w obrębie jakiegoś komponentu to wystarczyło by dodać do niego mouseLisstener, ale chodzi mi o cały ekran. Chyba, że można jakoś dostać się do ekranu i do niego to podpiąć? albo dostać się jakoś do bufora zdarzeń wejściowych od myszy?

Ewentualnie, okrężną drogą na skróty, zrobić odpytywanie myszy o jej stan co zadany czas powiedzmy 50-100ms z tym, że tutaj też nie wiem jak dostać się do informacji o stanie przycisków myszy, bo położenie kursora z mouseInfo można zebrać a stan przycisków skąd?

Będę wdzięczny za jakąkolwiek pomoc albo pomysły na realizacje takowego zagadnienia.

0

Jeśli chodzi o podstawy odnośnie myszy, to taki przyĸlad ale to pewnie znasz już.


package javaapplication10;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JPanel;


/**
 *
 * @author piotr
 */
public class Main extends JPanel{

    public Main(){
        setLayout(null);
      addMouseListener(new MouseAdapter() {


      public void mousePressed(MouseEvent e) {
          System.out.println("Wcisnięto przycisk myszy");
      System.out.println("współrzędne : "+ e.getX() + " " + e.getY());
      }

      public void mouseReleased(MouseEvent e) {
           System.out.println("Zwolniono przycisk myszy");
      System.out.println("współrzędne : "+ e.getX() + " " + e.getY());
      }

      public void mouseEntered(MouseEvent e) {
              System.out.println("Mysz powróciła do okna");
      System.out.println("współrzędne : "+ e.getX() + " " + e.getY());
      }

    public void mouseExited(MouseEvent e) {
            System.out.println("Mysz poza oknem!");
       System.out.println("współrzędne : "+ e.getX() + " " + e.getY());
    }

    public void wspolrzedne(MouseEvent e){
        System.out.println("współrzędne : "+ e.getX() + " " + e.getY());
    }

    });
    }

    public static void main(String[] args)   {
        JFrame frame = new JFrame("Mysz");
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.setSize(250, 200);
    frame.setLocation(200, 200);
    frame.setContentPane(new Main());
    frame.setVisible(true);
        
    }

}

Tylko to działa w obrębie apletu, okienka.
Jeśli chodzi o sprawdzanie współrzędnych spoza apletu, poruszanie kursorem, pisanie klawiaturą itp to poleciłbym klasę Robot, która też jest jedną z standardowo dołączanych bibliotek do Javy.

Jest także klasa MouseInfo , w niej na pewno znajdziesz to wszystko czego potrzeba, krótki przykład.
Nie doczytałem, że już z MouseInfo to masz, ale jak coś znajdę więcej odnośnie stanów do dokleję.


import java.awt.*;

public class Main {
    public static void main(String[] args) {
        int i = 0;
        while (i < 10) {

            Point location = MouseInfo.getPointerInfo().getLocation();
            double x = location.getX();
            double y = location.getY();

            System.out.println("x = " + x);
            System.out.println("y = " + y);

            try {
                Thread.sleep(3000);
                i++;
            } catch (InterruptedException e) {
                e.printStackTrace();
            }            
        }
    }
}
0

@nietoperek ... Ty umiesz w ogóle czytać?

0
Keraj napisał(a)

@nietoperek ... Ty umiesz w ogóle czytać?

Co to za poziom dyskusji? Trochę szacunku.

0

@nietopereek
Odnośnie Robota, to właśnie mam napisany program na podstawie tej klasy, który wczytuje zadania z pliku po czym je wykonuje. Tyle, że ręczne generowanie tych plików z zadaniami jest niewygodne i nietrudno się gdzieś pomylić, więc chce stworzyć program do automatycznej generacji takiej listy zadań, taka pseudo nauka robota.

Przemyślałem odpytywanie myszy o jej stan ale nawet jeżeli można mysz odpytać o coś takiego to sama inicjalizacja połączenia z komputera do myszy poprzez PS/2 zabiera 100ms więc mija się to z celem...

0

Możesz stworzyć niewidoczne okienko, które będzie miało wymiary całego ekranu (lub jego wirtualnego kawałka). Z tym, że wtedy musiałbyś ponownie symulować w systemie te ruchy myszą, które przechwyciłeś (co już nie jest banalne). Na tej zasadzie działa aplikacja full screen, opisana choćby w tutorialu javy (z tym, że tam wszystkie zdarzenia myszy idą tylko do aplikacji).

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.