web-dev-qa-db-fra.com

Comment puis-je écrire un écouteur de touches pour suivre toutes les frappes en Java?

Je veux écrire un écouteur de clés en Java. Il devrait suivre toutes les pressions sur les touches, que l'application Java ait le focus ou non. Est-ce possible?

16
Arghya Chakraborty

C'est possible mais nécessite une implémentation tirant parti de JNI qui ne sera pas toujours portable.

Java System Hook est une de ces bibliothèques qui fonctionnera avec Windows 32 et 64 bits.

12
Site Helpers

J'ai utilisé quelque chose comme ça il y a quelque temps. Jetez un œil à Java System Hook .

Il suit les pressions de touches globales (pas seulement votre Java) via JNI. Cela a fonctionné rapidement et parfaitement pour moi


KeyListener démarre en tant que thread démon, ce qui ne maintient pas l'application en vie. Vous devez avoir un autre thread non démon en cours d'exécution dans votre programme

Par exemple:

GlobalKeyListener globalKeyListener = new GlobalKeyListener();
globalKeyListener.addKeyListener(listener);
while (true) {
    Thread.sleep(1000);
}
15
Simiil

Non, Java n'a pas accès aux frappes en dehors de sa fenêtre active.

Pour ce faire, vous devez utiliser une combinaison de Java et code natif, en utilisant JNI pour appeler le code natif. Dans Microsoft Windows, vous devez regarder GetAsyncKeyState(key).

4
ᴇʟᴇvᴀтᴇ

C'est très possible, mais sans utiliser Java standard, vous devez interagir avec le système d'exploitation au niveau natif.

Voici une rubrique pour Windows qui utilise JNA pour accéder à la fonction SetWindowsHookEx dans l'API Windows User32.

3
pap

Non, Java n'écoute pas les frappes si ce n'est pas la fenêtre active (focalisée), vous ne pouvez donc pas le faire.

2
Valdas