Globaler KeyListener

Hallo zusammen,
ich möchte in Java sämtliche Tastatureingaben auslesen, auch wenn eine andere Anwendung den Focus hat. Im Internet findet man zwar Lösungen über native Methoden, aber dadurch geht eben auch die Plattformunabhängigkeit verloren. Meine Frage ist jetzt, ob sich ein globaler KeyListener auch allein mit Java realisieren lässt (muss ja eigentlich, Swing schafft das schließlich auch, aber der ist eben nicht global), oder ob das nicht möglich ist.

Das geht eigentlich nicht. Wie und wo meinst du, dass Swing das “schafft”?

Der KeyListener von Swing kann ja auch KeyEvents regristieren, und ich bin davon ausgegangen, dass diese global sind, und Swing sie nur dann weiterleitet, wenn die der Frame den Focus hat. Weiß jemand, wie die KeyEvents in Swing empfangen werden? Denn sie müssen ja in irgendeiner Weise von außen empfangen werden.

durch native code.

plattform unabhaengig schaffst du das nicht

Auch mit native-Code ist das nicht ganz trivial (und stellt auch ein Sicherheitsrisiko dar: Keylogger). Wenn ich mich recht entsinne, muss man die Win32-API-Funktion SetWindowsHookEx verwenden.
Für globale Hooks gilt allerdings:

The global hooks are a shared resource, and installing one affects all applications in the same desktop as the calling thread. All global hook functions must be in libraries. Global hooks should be restricted to special-purpose applications or to use as a development aid during application debugging.

Swing wird nicht global alle Tastenanschläge abfangen, sondern ebenfalls nur die Windows-Messages auswerten, die an den Prozess mit den GUI-Komponenten gesendet werden.

*** Edit ***

Kurze Recherche ergab folgendes: https://github.com/kwhat/jnativehook
Sieht auf den ersten Blick so aus, als wenn es die komplizierte Arbeit kapselt und weitestgehende Plattformunabhängigkeit ermöglicht.

Kurz: nein!
Grund: Java ist bewusst Plattform-unabhängig. Die Verarbeitung von Eingaben ist aber eine Plattform-abhängige Aufgabe des jeweiligen OS-Event-(Bus)-Systems - und das geht nur mit native-code.

Ooooder… man macht eine transparente Swing Vollbild Anwendung die Tastatur und Mauseingaben per Robot-Klasse weiterleitet an das darunter liegende Framework nach Abfang weiterleitet.
Über letzteres müsste man über verschiedene Möglichkeiten nachdenken.
Es wäre nicht perfekt, aber durchaus machbar.

Bei Hardwarezugriff gäbe es noch andere Möglichkeiten wenn man mal ein bisschen out-of-the-box denkt. Bevor ich aber gegen jegliche Forenregeln verstoße bin ich auch schon wieder weg.

https://forum.byte-welt.net/java-forum/allgemeine-themen/19154-globaler-keyhook-fuer-mediatasten.html

Wahrscheinlich das naheliegendste für dich. Ist native-code, aber liefert einige libs für die meisten Betriebssysteme mit, so dass es dort läuft.