Gesamten Keyboardinput auslesen

ImmNek

Mitglied
Hallo Leute,

ich habe wieder mal ein kleines Problem. Ich möchte gerne den Keyboardinput auslesen, aber damit es nicht zu einfach wird, muss es der ganze sein. Also auch der Input, der in einem anderen Programm eingegeben wird. Ein KeyListener funzt da leider nicht. In C ist es kein Problem, aber in Java krieg ich es einfach nicht hin und Google hilft mir auch nicht wirklich weiter.

Freundliche Grüsse

ImmNek
 

Ark

Top Contributor
java.awt.Robot?

… Hm, okay. Ich dachte gerade, die Klasse wäre auch für solche Sachen geeignet … ^^

Ark
 

Schandro

Top Contributor
hier wurde mal der GlobalKeyListener verlinkt, der mit ner nativen Library zusammenarbeitet. Leider find ich den Link net mehr..
 

ImmNek

Mitglied
Genau, Windows, Sysmteweit jeder Tastendruck ;-) Wenn es so einfach wäre, dann bräuchte ich ja au keine Hilfe ;-) Naja, ich habe mir gedacht vielleicht gibt es eine Funktion, welche die Tastatur auslesen kann, dann könnte ich zB alle 10 ms mal die Tastatur abfragen und die Logik selber implementieren.

Aber auf jede Fall möchte ich euch für die Stichworte danken, ich werde mal meine Google-Research damit anreichern ;-)

Schönen Pfingstmontag die Herren und Damen

ImmNek
 

ImmNek

Mitglied
Dankeschön, den werde ich mit gleich einmal ansehen, ich denke, dann ist dieser Beitrag wohl erschlagen.

Vielen Dank nochmal für die schnelle Hilfe.
 

kay73

Bekanntes Mitglied
Genau, Windows, Sysmteweit jeder Tastendruck ;-)
Da hilft dir aber ein AWTEventListener nicht weiter. Damit habe ich auch mal rumgespielt, um sowas wie eine geheime Tastenfolge á la [ALT]+"DEBUG" applikationsweit abzufangen. (Was auch gut klappt).

Wenn jemand Text in die Notepad.exe tippt, bekommt das ein Java-Programm nicht mit. Da muss man schon mehr Aufwand treiben.

Und lass die Finger von diesem "JGlobalKeyLogger"!!!!

Der fragt alle 5 Sekunden das gesamte Keyboard ab und hofft auf gut Glück erraten zu können, ob eine Taste gerade gedrückt ist.

Windows hat für sowas eine richtige API: Hooks (Windows)

Hier hat einer an einem Java Wrapper dafür gearbeitet, der auf den ersten Blick ganz ordentlich aussieht:
Java Native Interface (JNI) - <b>Keyboard or Mouse hook in JNI</b> [Locked]
 
Zuletzt bearbeitet:

ImmNek

Mitglied
Hehe, ich hätte jetzt jetzt auch einfach alle 10 ms oder so das Keyboard abgefragt. Wieso ist das so schlecht? so kriege ich sicher au alles mit. Wenn es natürlich auch sehr viel simpler geht, dann habe ich auch nichts dagegen :) Aber ich habe mir das ganze eigentlich sehr einfach vorgestellt, auch wenn es nicht sehr elegant ist und ich vielleicht wieder einmal etwas implementiere, was schon lange programmiert wurde, und das wahrscheinlich schon sehr gut ;)
 

kay73

Bekanntes Mitglied
Das JNA-Projekt bildet u. a. Windows DLLs (inklusive Hook-API) nach Java ab und hat genau einen solchen KeyLogger als Demo. Der ist direkt lauffähig und funktionierte unter Windows XP auf Anhieb.

Du brauchst diese beiden JARs im Klassenpfad:
jna.jar
platform.jar
Java:
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.User32.HHOOK;
import com.sun.jna.platform.win32.User32.KBDLLHOOKSTRUCT;
import com.sun.jna.platform.win32.User32.LowLevelKeyboardProc;
import com.sun.jna.platform.win32.User32.MSG;
import com.sun.jna.platform.win32.W32API.HMODULE;
import com.sun.jna.platform.win32.W32API.LRESULT;
import com.sun.jna.platform.win32.W32API.WPARAM;

/** Sample implementation of a low-level keyboard hook on W32. */

public class KeyHook {

	private static volatile boolean quit;
	private static HHOOK hhk;
	private static LowLevelKeyboardProc keyboardHook;

	public static void main(String[] args) {

		final User32 lib = User32.INSTANCE;
		HMODULE hMod = Kernel32.INSTANCE.GetModuleHandle(null);

		keyboardHook = new LowLevelKeyboardProc() {

			public LRESULT callback(int nCode, WPARAM wParam,
					KBDLLHOOKSTRUCT info) {

				if (nCode >= 0) {
					switch (wParam.intValue()) {
					case User32.WM_KEYUP:
					case User32.WM_KEYDOWN:
					case User32.WM_SYSKEYUP:
					case User32.WM_SYSKEYDOWN:

						System.err.println("in callback, key=" + info.vkCode);

						if (info.vkCode == 81) {
							quit = true;
						}
					}
				}

				return lib .CallNextHookEx(hhk, nCode, wParam, info.getPointer());
			}
		};

		hhk = lib.SetWindowsHookEx(User32.WH_KEYBOARD_LL, keyboardHook, hMod, 0);
		System.out.println("Keyboard hook installed, type anywhere, 'q' to quit");

		new Thread() {

			public void run() {

				while (!quit) {

					try {
						Thread.sleep(10);
					} catch (Exception e) {
					}
				}

				System.err.println("unhook and exit");
				lib.UnhookWindowsHookEx(hhk);
				System.exit(0);
			}
		}.start();

		// This bit never returns from GetMessage

		int result;
		MSG msg = new MSG();

		while ((result = lib.GetMessage(msg, null, 0, 0)) != 0) {

			if (result == -1) {
				System.err.println("error in get message");
				break;
			}

			else {
				System.err.println("got message");
				lib.TranslateMessage(msg);
				lib.DispatchMessage(msg);
			}
		}

		lib.UnhookWindowsHookEx(hhk);
	}
}
Das Source-File gibt es auch im Pfad /jna/jnalib/contrib/src/w32keyhook/KeyHook.java der JNA Sourcen. Du musst dafür die Sourcen aus dem SVN von jna auschecken. Hier steht wie es geht. Die interessanten Zeilen sind 24-46. Du musst aber unbedingt in Deiner Implementierung auch am Ende
Code:
UnhookWindowsHookEx()
aufrufen, denn dieser Code gräbt sich zur Laufzeit ins System.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Kein überprüfen des gesamten Arrays möglich.(Viergewinnt Spiel) Java Basics - Anfänger-Themen 6
S Gesamten String in einer Zeile ausgeben Java Basics - Anfänger-Themen 2
G Gesamten clickCount mehrerer JPanels herausfinden Java Basics - Anfänger-Themen 5
A Buchstaben auslesen lassen vom Scanner Java Basics - Anfänger-Themen 18
richis-fragen JComboBox ist editable und eingegebenen Text auslesen bei focusLost() Java Basics - Anfänger-Themen 1
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
T array auslesen Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
N Einzelne Werte aus einem TreeSet auslesen Java Basics - Anfänger-Themen 2
D Eclipse will nicht auslesen Java Basics - Anfänger-Themen 6
E TIF Datei auslesen Java Basics - Anfänger-Themen 2
krgewb Breite und Höhe eines Bildes in base64 auslesen Java Basics - Anfänger-Themen 3
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
U Sekunden von LocalTime auslesen, wie möglich? Java Basics - Anfänger-Themen 1
E Outlook ordner auslesen Java Basics - Anfänger-Themen 4
R Eigenschaft über Parameter auslesen und ändern Java Basics - Anfänger-Themen 15
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
J Datei aus Netzwerk auslesen Java Basics - Anfänger-Themen 9
J Jsonfile auslesen Java Basics - Anfänger-Themen 8
A Eine Textdatei auslesen Java Basics - Anfänger-Themen 16
N Aus einem String die Anzahl der Vokale auslesen Java Basics - Anfänger-Themen 40
H Array rückwärts auslesen funktioniert nicht Java Basics - Anfänger-Themen 3
J Bestimmte parameter aus Jsonfile auslesen Java Basics - Anfänger-Themen 15
AleXusher Mehrdimensionales Array aus txt.file auslesen Java Basics - Anfänger-Themen 4
L Zeichen an bestimmter Stelle auslesen Java Basics - Anfänger-Themen 4
3 Textdatei Zeilenweise auslesen Java Basics - Anfänger-Themen 3
J Json Datei auslesen Java Basics - Anfänger-Themen 4
I Java String einlesen und auslesen Java Basics - Anfänger-Themen 11
S Tastatureingabe auslesen und in Konsole ausgeben Java Basics - Anfänger-Themen 6
S CSV Datei auslesen und anders darstellen Java Basics - Anfänger-Themen 2
G Scanner nutzen und Index auslesen Java Basics - Anfänger-Themen 8
N JTable auslesen Java Basics - Anfänger-Themen 6
N Java CSV Datei auslesen Java Basics - Anfänger-Themen 6
F Webseiten Quelltext auslesen Java Basics - Anfänger-Themen 5
J Datei auslesen (nur bestimmte Stellen) Java Basics - Anfänger-Themen 2
I csv auslesen, mittels List Java Basics - Anfänger-Themen 18
S Letzte Zahl eines Integer auslesen? Java Basics - Anfänger-Themen 3
G If / While Programm (Datei auslesen) Java Basics - Anfänger-Themen 6
S Aus einer .bz2 Datei auslesen Java Basics - Anfänger-Themen 2
K Textdatei auslesen und über Mqtt schicken Java Basics - Anfänger-Themen 4
B Name von Verzeichnis bekommen - Files von einem Ordner auslesen Java Basics - Anfänger-Themen 4
A Daten auslesen/vergleichen Java Basics - Anfänger-Themen 3
D XML von Seite auslesen Jsoup Java Basics - Anfänger-Themen 2
I Druckerauflösung auslesen - mittlerweile möglich? Java Basics - Anfänger-Themen 4
B WSDL auslesen? Java Basics - Anfänger-Themen 8
D Methoden Textdokument erstellen und auslesen. Java Basics - Anfänger-Themen 46
B HTML Code / Seite auslesen und JAVA Objekte erstellen Java Basics - Anfänger-Themen 12
S Datein auslesen und verarbeiten Java Basics - Anfänger-Themen 1
J Geld speichern und wieder auslesen Java Basics - Anfänger-Themen 10
S CSV auslesen UTF-8 Problem Java Basics - Anfänger-Themen 7
D Datei auslesen & Werte in Variable speichern Java Basics - Anfänger-Themen 12
K String buchstaben auslesen Java Basics - Anfänger-Themen 9
S Amazon Produktbeschreibung auslesen und nach Keywords suchen Java Basics - Anfänger-Themen 2
x-tshainge Interface Wie kann ich aus Textfeldern auslesen Java Basics - Anfänger-Themen 6
Z Ersten Buchstaben eines Elements eines String-Arrays auslesen Java Basics - Anfänger-Themen 5
B .txt. Datei auslesen und bestimmten Wert wiedergeben Java Basics - Anfänger-Themen 5
CptK x wert eines Bildes auslesen Java Basics - Anfänger-Themen 1
T Website auslesen Java Basics - Anfänger-Themen 2
T String auslesen bzw. überprüfen Java Basics - Anfänger-Themen 1
L CSV Auslesen Java Basics - Anfänger-Themen 5
B Auslesen von PDF / Bilder Java Basics - Anfänger-Themen 5
das_leon Alle Zeilen einer CSV-Datei auslesen Java Basics - Anfänger-Themen 1
D Mit Java HTML bzw Javascript auslesen Java Basics - Anfänger-Themen 1
F Arrays Sätze speichern und einzelne Worte mit Index Angabe auslesen Java Basics - Anfänger-Themen 4
F Zwischenwerte aus Browser auslesen Java Basics - Anfänger-Themen 19
S Jede Ziffer einer Zahl auslesen, damit rechnen und beim Ergebnis wiederholen ? Java Basics - Anfänger-Themen 20
G Servlet - externe HTML (URL) auslesen Java Basics - Anfänger-Themen 1
T class Datei auslesen Java Java Basics - Anfänger-Themen 5
P Liste auslesen und in Variablen speichern Java Basics - Anfänger-Themen 7
D String erste Zahl mit LKZ auslesen lassen Java Basics - Anfänger-Themen 36
J Hashmap auslesen Java Basics - Anfänger-Themen 7
J Auslesen/speichern und wieder einlesen Java Basics - Anfänger-Themen 7
D String untereinander auslesen lassen Java Basics - Anfänger-Themen 2
M Aus Datei auslesen und untersuchen ob diese Zeile schon vorhanden ist Java Basics - Anfänger-Themen 3
DaCrazyJavaExpert Variablen Zahlen aus Strings auslesen Java Basics - Anfänger-Themen 4
J Informationen aus Webseiten auslesen Java Basics - Anfänger-Themen 1
S Text aus einer HTML Datei auslesen Java Basics - Anfänger-Themen 1
M Einzelne Pixel in einem Bild auslesen und bearbeiten Java Basics - Anfänger-Themen 1
dragonfight86 Erste Schritte OpenDocument auslesen Java Basics - Anfänger-Themen 13
I Texte mit Absätzen in Dateien speichern und auslesen Java Basics - Anfänger-Themen 1
W DNS Name auslesen + weitere Anfängerfrage Java Basics - Anfänger-Themen 4
C Werte aus JTable auslesen Java Basics - Anfänger-Themen 4
Chrizzey45 Calc-Dokument in Java auslesen? Java Basics - Anfänger-Themen 2
B Datei auslesen und 2D-Array anlegen Java Basics - Anfänger-Themen 1
B Key auslesen/ausgeben innerhalb von foreach() Java Basics - Anfänger-Themen 5
M Eigenschaften einer Datei auslesen Java Basics - Anfänger-Themen 5
M Textarea auslesen und beschreiben Java Basics - Anfänger-Themen 8
JokerBlacky Klassen Klasse Queue Klasse mit Attributen anhängen und auslesen können Java Basics - Anfänger-Themen 4
Y Bildschirmauflösung auslesen Java Basics - Anfänger-Themen 4
S for schleife auslesen Java Basics - Anfänger-Themen 4
Voreck String Zeichen für Zeichen auslesen Java Basics - Anfänger-Themen 9
Voreck Array aus txt datei auslesen Java Basics - Anfänger-Themen 2
N JFreeChart --> TimeSeries auslesen Java Basics - Anfänger-Themen 9
OlafHD Datei Auslesen Java Basics - Anfänger-Themen 6
M Metadaten OpenOffice mit Java auslesen Java Basics - Anfänger-Themen 9
P JList, aus selectedValue bestimmten Wert aus Containerklasse auslesen Java Basics - Anfänger-Themen 4
J OpenOffice Dokumentenvariable mit Java auslesen Java Basics - Anfänger-Themen 1
P Daten von Internetseite auslesen Java Basics - Anfänger-Themen 10
L Text eingeben und im Textfeld auslesen lassen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben