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?
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.
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);
}
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)
.
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.
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.