Mausclick Zähler

localhost1

Mitglied
Hallo,

Also ich möchte gerne ein Programm haben welches einfach die Mausclicks zählt. Nicht nur die Mausclicks die auf einen Button gemacht wurden oder die innerhalb dieses Frames abliefen, sondern ein globaler Mausklickzähler.


Java:
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;


public class BaseZaehler extends Frame{
	/**
	 * 
	 */
	private static final long serialVersionUID = 330270220103383417L;
	Label lbl1 = new Label();
	Label lbl2 = new Label();
	int zähler;
	
		public BaseZaehler (){
			
			// FRAME

			super();
			setTitle("MausKlickZähler");
			setBackground(Color.lightGray);
			
			//PANEL + LABEL

			setLayout(new BorderLayout());
			lbl1.setBackground(Color.white);
			lbl2.setBackground(Color.cyan);
			add(lbl1, BorderLayout.SOUTH);
			add(lbl2, BorderLayout.CENTER);
			
			//EREIGNISSE

			
			addWindowListener(new WindowListener(){

				public void windowActivated(WindowEvent arg0) {
					// TODO Auto-generated method stub
					
				}

				public void windowClosed(WindowEvent arg0) {
					// TODO Auto-generated method stub
					
				}

				public void windowClosing(WindowEvent arg0) {
					System.exit(0);
					
				}

				public void windowDeactivated(WindowEvent arg0) {
					// TODO Auto-generated method stub
					
				}

				public void windowDeiconified(WindowEvent arg0) {
					// TODO Auto-generated method stub
					
				}

				public void windowIconified(WindowEvent arg0) {
					// TODO Auto-generated method stub
					
				}

				public void windowOpened(WindowEvent arg0) {
					// TODO Auto-generated method stub
					
				}
				
			
		});

			
			lbl2.addMouseListener(new MouseListener(){

				public void mouseClicked(MouseEvent e) {
					  zähler = e.getClickCount();
					  lbl1.setText("Es wurde: " + zähler + " die Maus gedrückt.");
					}

				public void mouseEntered(MouseEvent arg0) {
					// TODO Auto-generated method stub
					
				}

				public void mouseExited(MouseEvent arg0) {
					// TODO Auto-generated method stub
					
				}

				public void mousePressed(MouseEvent arg0) {
					// TODO Auto-generated method stub
					
				}

				public void mouseReleased(MouseEvent arg0) {
					// TODO Auto-generated method stub
					
				}});
			
			
			//Ausgabe auf label1
			
			lbl1.setText("Es wurde: " + zähler + " die Maus gedrückt.");
			
		}
	}

Das habe ich einem Thread hier im Forum entnommen, dummerweise ist es eben kein "globaler" Mausklickzähler, hat jemand eine Idee?

Das Programm sollte schon so etwa eine Woche durchlaufen können ohne hängen zu bleiben.


Falls keine direkten Ideen vorhanden sind bin ich auch sehr froh über kurze Denkanstöße
 

Camill

Bekanntes Mitglied
Zeile 80 müsstest du durch
Code:
zähler++;
austauschen, dann wird nicht immer wieder bei 0 angefangen zu zählen sobald an eine andere stelle geklickt wird.

Was genau meinst du mit Global?
 
G

Gast2

Gast
Mit Java allein wirst du da nicht weiterkommen. In Java kommst du nur an Mausklicks ran die auf deine Komponenten gemacht werden. Da wirst du dir wohl ne Lösung mit JNI suchen müssen.
 

Der Müde Joe

Top Contributor
Wenn du mit global meinst alle Mausklicks im System, dann wird Java nicht reichen. Da must du dich schon an die entprechenden OS-APIs wenden.
 

njans

Top Contributor
Das wird mit Java nicht so leicht werden. Du willst ja da Daten vom System haben, die nichts mit dem Programm zu tun haben. Vielleicht da ein externes Package, da müsste sich dann aber mal jemand melden, der ein solches kennt.
 

localhost1

Mitglied
Ja richtig, mit "global" meine ich systemweit.


Mich interessiert wie oft mit der Maus insgesamt geklickt wurde, nicht nur wie oft auf eine spezielle Schaltfläche geklickt wurde.




Dumme Frage:

Gibt es eine Hardwarelösung für so Etwas? Oder wenn ich z.b. sage ich nehme nur usb Mäuse her, dass ich die Signale am usb Port irgendwie auswerte?
 

localhost1

Mitglied
Danke für den Link, ich habe alle Dateien heruntergeladen (text reinkopiert und entsprechende Dateien erstellt, auch package Namen beibehalten).

Ich benutze Eclipse SDK 3.7.0 und erhalte folgenden Fehler bei Ausführung von MouseHookTest:

######

MouseHookTest [Java Application]
de.ksquared.test.system.mouse.MouseHookTest at localhost:50336
Thread [main] (Running)
Daemon Thread [Thread-0] (Suspended (exception UnsatisfiedLinkError))
MouseHook.registerHook(GlobalMouseListener) line: not available [native method]
PoolHook.run() line: 50
Daemon Thread [AWT-Windows] (Running)
C:\Program Files\Java\jre6\bin\javaw.exe (14.11.2011 10:45:26)

#####


Diese Fehlermeldung kommt auch bei einigen Kommentaren vor ( wenn man bei Java – Global (low level) Keyboard / Mouse Hook – JNI kSquared.de – Blog nach unten scrollt), dummerweise keine Lösung dazu.

Hat jemand einen Vorschlag? Muss ich vielleicht bei Java Native irgendwie anders kompilieren?
 
Zuletzt bearbeitet:

localhost1

Mitglied
da ich irgendwie nicht mehr editieren kann:

Auf dem Link finde ich auch 2 Dateien die zu C++ zu gehören scheinen... muss ich die irgendwie mit meinen Java Dateien verbinden?
 
I

irgendjemand

Gast
du musst die DLL auch erstmal erzeugen *bei c++ : compilen und dann linken* ... einfach mit den source-files wirst du in java nicht viel anfangen können ...

am besten du suchst pre-compiled DLL ... falls es die gibt ...
 

Kevin94

Top Contributor
[c]System.getProperty("java.library.path")[/c]
Ich glaub auf Windoof ist das per default mit der PATH variablen identisch, wenn nicht per Hand gesetzt.
 

localhost1

Mitglied
Java:
System.out.println(System.getProperty("java.library.path"));

liefert mir:

C:\Program Files\Java\jre6\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\usr\bin


Ich habe die 2 dlls aus dem link (mousehook-win-amd64.dll sowie mousehook-win-x86.dll) in C:\Program Files\Java\jre6\bin kopiert.

Wenn ich es starte kommt immer noch das hier:

Java:
de.ksquared.test.system.mouse.MouseHookTest at localhost:52626	
	Thread [main] (Running)	
	Daemon Thread [Thread-0] (Suspended (exception UnsatisfiedLinkError))	
		MouseHook.registerHook(GlobalMouseListener) line: not available [native method]	
		PoolHook.run() line: 50	
	Daemon Thread [AWT-Windows] (Running)

ich habe das Gefühl, ein einfaches reinkopieren ist nicht genug. Muss ich dlls nicht irgendwie mit dem Projekt linken oder so?
 
Zuletzt bearbeitet:

localhost1

Mitglied
ich konnte mit System.load("*.dll"); die dll laden

Java:
public static void main(String[] args) {
		System.load("C:\\prog\\mousehook-win-amd64.dll");
		new GlobalMouseListener().addMouseListener(new MouseAdapter() {
			@Override public void mousePressed(MouseEvent event)  { System.out.println(event); }
			@Override public void mouseReleased(MouseEvent event)  { System.out.println(event); }
			@Override public void mouseMoved(MouseEvent event) {
				System.out.println(event);
				if((event.getButtons()&MouseEvent.BUTTON_LEFT)!=MouseEvent.BUTTON_NO
				&& (event.getButtons()&MouseEvent.BUTTON_RIGHT)!=MouseEvent.BUTTON_NO)
					System.out.println("Both mouse buttons are currenlty pressed!");
			}
		});
		while(true)
			try { Thread.sleep(100); }
			catch(InterruptedException e) { e.printStackTrace(); }
	}

wie krieg ich jetzt aus dieser Main Methode einen Zähler? es muss nicht mal graphisch sein, sondern irgendwie mit datum in einer datei loggen oder so
 
Zuletzt bearbeitet:
G

Gast2

Gast
Die Methoden mousePressed, mouseReleased, mouseMoved sollten doch jetzt aufgerufen werden wenn du die Maus bewegst oder nicht? Du hast nen Sysout drin, wird das ausgegeben?
Dann bekommst du doch jetzt alle Events mit die du brauchst oder nicht?
 

localhost1

Mitglied
Die Methoden mousePressed, mouseReleased, mouseMoved sollten doch jetzt aufgerufen werden wenn du die Maus bewegst oder nicht? Du hast nen Sysout drin, wird das ausgegeben?
Dann bekommst du doch jetzt alle Events mit die du brauchst oder nicht?



soweit ich obigen Quellcode richtig verstanden habe muss ich beide Maustasten gleichzeitig drücken damit auf der Console was ausgegeben wird. Das Programm läuft auch, ich sehe dass in der Console was läuft (kann den roten Stop button drücken)

aber wenn ich beide Maustasten drücke(habe alle Variationen ausprobiert ;) ) kommt keine Ausgabe.
 
G

Gast2

Gast
Java:
System.out.println(event);
Zumindest den Sysout müsstest du sehen wenn alles richtig funktioniert.
 

localhost1

Mitglied
Mein Code sieht jetzt so aus:

Java:
public class MouseHookTest {
	public static void main(String[] args) {
		System.load("C:\\prog\\mousehook-win-amd64.dll");
		new GlobalMouseListener().addMouseListener(new MouseAdapter() {
			@Override public void mousePressed(MouseEvent event)  { System.out.println(event); }
			@Override public void mouseReleased(MouseEvent event)  { System.out.println(event); }
			@Override public void mouseMoved(MouseEvent event) {
				System.out.println(event);
				if((event.getButtons()&MouseEvent.BUTTON_LEFT)!=MouseEvent.BUTTON_NO
				&& (event.getButtons()&MouseEvent.BUTTON_RIGHT)!=MouseEvent.BUTTON_NO)
					System.out.println(event);
			}
		});
		while(true)
			try { Thread.sleep(100); }
			catch(InterruptedException e) { e.printStackTrace(); }
	}
}


Wenn ich beide Maustasten gleichzeitig clicke und wieder loslasse usw kommt nichts. Console ist leer (sehe aber an dem roten Stop Button dass was läuft)

Muss ich ein spezielles Fenster anklicken oder die Console oder sowas?
 

localhost1

Mitglied
Ist der code oben übrigens stimmig? Also für die Leute die sich damit auskennen? Wahrscheinlich würde ich keinen Fehler sehen wenn ich ihn vor mir hätte
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Mausclick all 5 Sekunden Java Basics - Anfänger-Themen 4
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
P9cman Vokal Zähler mit switch case und for-Schleife Java Basics - Anfänger-Themen 4
R Primzahlen Zähler Programm / Benachbarte Primzahlen Java Basics - Anfänger-Themen 30
M Zähler Java Basics - Anfänger-Themen 3
I Zähler, der erst wieder zählt nachdem Pixel wieder andere Farbe hat Java Basics - Anfänger-Themen 2
K Variablen Zähler Variable in Prozedur Java Basics - Anfänger-Themen 9
F For Schleife ohne Zähler Java Basics - Anfänger-Themen 3
A Ping Pong Score Zähler,aber wie? Java Basics - Anfänger-Themen 3
D Zähler nicht sichtbar (Thema: Konstruktoren) Java Basics - Anfänger-Themen 2
M Variablen Zähler funktioniert nicht - Android App Java Basics - Anfänger-Themen 3
J Zahlensytem-Zähler Java Basics - Anfänger-Themen 1
K JTextField auslesen, in int umwandeln und in einer anderen Klasse als Zähler verwenden Java Basics - Anfänger-Themen 3
R Zähler Java Basics - Anfänger-Themen 9
T Zähler Klasse Java Basics - Anfänger-Themen 4
R Erste Schritte Arbeitszeit Zähler bzw Feierabend Uhr | GregorianCalendar | SimpleDateFormat| Java Basics - Anfänger-Themen 3
StupidAttack Zähler Java Basics - Anfänger-Themen 5
L Minimumsuche mit Zähler Java Basics - Anfänger-Themen 14
-horn- Was passiert, wenn Zähler über Integer Max läuft? Java Basics - Anfänger-Themen 9
O Verständnisfrage Zähler/Rekursion Java Basics - Anfänger-Themen 4
D Zähler beim aufrufen des Strings Java Basics - Anfänger-Themen 2
Z klick zähler Java Basics - Anfänger-Themen 2
N Zähler? Java Basics - Anfänger-Themen 3
F Problem, Zähler speichern Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben