Essayez le hooking global en Java à l'aide de la bibliothèque JNativeHook

Environnement d'écrivain

Windows10 Home / JDK1.8

Dépôt Maven

<dependency>
    <groupId>com.1stleg</groupId>
    <artifactId>jnativehook</artifactId>
    <version>2.1.0</version>
</dependency>

Essayez-le pour le moment (cliquez sur la touche)

import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;

public class Example implements NativeKeyListener {
    public static void main(String[] args) {
        //Si pas accro
        if (!GlobalScreen.isNativeHookRegistered()) {
            try {
                //Enregistrer le crochet
                GlobalScreen.registerNativeHook();
            } catch (NativeHookException e) {
                e.printStackTrace();
                System.exit(-1);
            }
        }
        //Enregistrer un auditeur clé
        GlobalScreen.addNativeKeyListener(new Example());
    }

    //Lorsque vous appuyez sur une touche
    @Override
    public void nativeKeyPressed(NativeKeyEvent e) {
        System.out.println(e.paramString());
    }
    
    //Lorsque vous relâchez la clé
    @Override
    public void nativeKeyReleased(NativeKeyEvent e) {
        System.out.println(e.paramString());
    }

    //Lorsque vous tapez la clé
    @Override
    public void nativeKeyTyped(NativeKeyEvent e) {
        System.out.println(e.paramString());
    }
}

Ce code vous permet de configurer un écouteur de clé pour tous les threads en cours d'exécution, pas seulement le thread exécutant ce code.

L'événement se produit lorsque vous appuyez sur une touche d'un logiciel tel que Chrome ou Minecraft.

En outre, chaque constante d'événement de clé est la même que chaque constante java.awt.event.KeyListener.

Et les autres auditeurs?

//Auditeur de souris
GlobalScreen.addNativeMouseListener(NativeMouseListener);

//Auditeur de mouvement de souris
GlobalScreen.addNativeMouseMotionListener(NativeMouseMotionListener);

//Écouteur de la molette de la souris
GlobalScreen.addNativeMouseWheelListener(NativeMouseWheelListener);

Et des écouteurs liés à la souris sont disponibles.

Effacer le journal

Si vous n'en avez pas besoin, une quantité considérable de journaux sera générée par défaut. LogManager.getLogManager().reset(); Ajoutons même autour de la méthode principale.

Faire de l'événement une représentation textuelle

Il existe une méthode paramString (), alors utilisons-la.

Recommended Posts

Essayez le hooking global en Java à l'aide de la bibliothèque JNativeHook
Essayez d'utiliser l'API Stream en Java
Essayez d'utiliser l'analyse syntaxique de l'API COTOHA en Java
Essayez d'utiliser RocksDB avec Java
Essayez d'implémenter le tamis Eratostenes en utilisant la bibliothèque standard de Java
Essayez d'ajouter du texte à une image avec Scala en utilisant la bibliothèque standard de Java
[Java] Essayez de modifier les éléments de la chaîne Json à l'aide de la bibliothèque
[Java] Utiliser la technologie cryptographique avec les bibliothèques standard
Essayez d'utiliser l'API au format JSON en Java
Essayez d'appeler le service CORBA sur Java 11+
Essayez d'utiliser la télécommande Wii en Java
ChatWork4j pour l'utilisation de l'API ChatWork en Java
Essayez d'utiliser Sourcetrail (version win) avec du code Java
Essayez d'utiliser l'API Cloud Vision de GCP en Java
Essayez d'utiliser Sourcetrail (version macOS) avec du code Java
Essayez d'accéder à l'ensemble de données depuis Java en utilisant JZOS
Afficher "Hello World" dans le navigateur à l'aide de Java
Afficher "Hello World" dans le navigateur à l'aide de Java
Différences de code lors de l'utilisation du système de longueur en Java
Essayez de gratter en utilisant Java [Note]
Essayez d'appeler JavaScript en Java
Essayez le type fonctionnel en Java! ①
Implémentez Thread en Java et essayez d'utiliser la classe anonyme Lambda
J'ai essayé d'utiliser la bibliothèque CameraX avec Android Java Fragment
Accéder à l'interface réseau avec Java
[Java] Obtenez des informations sur la date 10 jours plus tard en utilisant la milliseconde dans la classe Date
Essayez d'implémenter Android Hilt en Java
[Java] Essayez de résoudre le problème de Fizz Buzz en utilisant un traitement récursif
Spécifiez l'emplacement Java dans eclipse.ini
Comparaison Java à l'aide de la méthode compareTo ()
Décompressez le fichier zip en Java
Essayez d'exécuter Selenuim 3.141.59 avec eclipse (java)
Essayez une expression If en Java
Analyser l'analyse syntaxique de l'API COTOHA en Java
Essayez d'utiliser le système de messagerie Pulsar
Connexion HTTPS utilisant tls1.2 dans Java 6
J'ai essayé d'utiliser JWT en Java
Essayez d'exécuter AWS X-Ray en Java
Comment résoudre l'erreur inconnue apparue lors de l'utilisation de slf4j en Java
Essayez d'implémenter Yuma en Java
Essayez d'utiliser le traçage de méthode IBM Java
Essayez d'utiliser le SDK Java d'Hyperledger Iroha
[Java] Où avez-vous essayé d'utiliser java
Appelez la super méthode en Java
NLP4J [002] Essayez l'analyse syntaxique du japonais à l'aide de Yahoo! Developer Network Japanese Dependency Analysis (V1) en Java
Analyser et objectiver JSON à l'aide de l'annotation @JsonProperty de la bibliothèque Java Jackson
À propos du phénomène que StackOverflowError se produit lors du traitement à l'aide d'expressions régulières Java
Essayez d'utiliser le framework Java Nablarch [Application Web]
Obtenez le résultat de POST en Java
Essayez d'utiliser || au lieu de l'opérateur ternaire
Essayez de résoudre Project Euler en Java
Référence Java à comprendre dans la figure
Essayez d'utiliser le service sur Android Oreo
Formation des nouveaux arrivants à l'aide de la programmation Web-Basic à l'aide de Java-
Appelez l'API de notification Windows en Java
Étude de Java Essayez d'utiliser un scanner ou une carte
Organisation des notes dans la tête (Java-Arrangement)