Faisons un robot! "Une simple démo de Java AWT Robot"

robot

Dans le dictionnaire, un robot est «assemblé comme une machine et présente diverses fonctions de mouvement similaires à celles des humains». Cependant, s'il y a un mouvement de type humain non seulement dans le matériel mais aussi dans le logiciel, c'est aussi un robot.

Faisons un robot logiciel pour cette activité!

Java AWT Robot

Il existe différentes plates-formes, mais cette fois, j'utiliserai Java AWT pour le robot logiciel. Java AWT (Abstract Window Toolkit) est une API pour développer des applications GUI ou Windows en Java. Il existe une API Robot dans AWT. Ce robot peut exécuter automatiquement des fonctions en natif de l'OS.

Comment utiliser le robot

Appuyez sur le clavier:

MyRobot.java


//appuyez sur Entrée
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);

Mouvement de la souris:

MyRobot.java


//La souris est la scène X:350,Y:Passer à 400
robot.mouseMove(350,400);

retard:

MyRobot.java


//1 seconde de retard
robot.delay(1000);

NiseAPI

Pour faciliter l'utilisation, j'ai créé ma propre API. "Gratuit" qui peut être forké avec ce lien: https://github.com/CoralBeef-zz/Nise

Ou partagez le code ici:

NiseRobot.java


import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyEvent;

public class NiseRobot extends Robot {


    public NiseRobot() throws AWTException {}

    public void delayedKeyPress(int keyToPress) {
        delayedKeyPress(keyToPress,500);
    }

    public void delayedKeyPress(int keyToPress, int delay_time) {
        delay(delay_time);
        keyPress(keyToPress);
        keyRelease(keyToPress);
    }

    public void instantType(String text) {
        StringSelection stringSelection = new StringSelection(text);
        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
        clipboard.setContents(stringSelection, stringSelection);

        keyPress(KeyEvent.VK_CONTROL);
        keyPress(KeyEvent.VK_V);
        keyRelease(KeyEvent.VK_V);
        keyRelease(KeyEvent.VK_CONTROL);
    }

    public void waitFor(int delay_in_milliseconds) {
        try {
            Thread.sleep(delay_in_milliseconds);
        } catch(InterruptedException ioe) {}
    }

    public void mouseGlide(int x1, int y1, int x2, int y2, int t, int n) {
        try {
            double dx = (x2 - x1) / ((double) n);
            double dy = (y2 - y1) / ((double) n);
            double dt = t / ((double) n);
            for (int step = 1; step <= n; step++) {
                Thread.sleep((int) dt);
                mouseMove((int) (x1 + dx * step), (int) (y1 + dy * step));
            }
        } catch (InterruptedException e) {}
    }
}

Exemple TwitterBot

Pour échantillonner, je suis un programme qui peut publier automatiquement sur Twitter. Essayez-le vous-même.

Nise.start()


String tweet = JOptionPane.showInputDialog(new JFrame("NameFrame"), "What do you want to tweet?");

        robot.delayedKeyPress(KeyEvent.VK_WINDOWS);

        robot.delayedKeyPress(KeyEvent.VK_C);
        robot.delayedKeyPress(KeyEvent.VK_H);
        robot.delayedKeyPress(KeyEvent.VK_R);
        robot.delayedKeyPress(KeyEvent.VK_O);
        robot.delayedKeyPress(KeyEvent.VK_M);
        robot.delayedKeyPress(KeyEvent.VK_E);

        robot.delayedKeyPress(KeyEvent.VK_ENTER);

        robot.mouseGlide(500,500, 600, 60, 8, 1000);
        robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
        robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);


        robot.delayedKeyPress(KeyEvent.VK_H);
        robot.delayedKeyPress(KeyEvent.VK_T);
        robot.delayedKeyPress(KeyEvent.VK_T);
        robot.delayedKeyPress(KeyEvent.VK_P);
        robot.delayedKeyPress(KeyEvent.VK_S);

        //Colon
        robot.keyPress(KeyEvent.VK_SHIFT);
        robot.keyPress(KeyEvent.VK_SEMICOLON);
        robot.keyRelease(KeyEvent.VK_SEMICOLON);
        robot.keyRelease(KeyEvent.VK_SHIFT);

        robot.delayedKeyPress(KeyEvent.VK_SLASH);
        robot.delayedKeyPress(KeyEvent.VK_SLASH);
        robot.delayedKeyPress(KeyEvent.VK_T);
        robot.delayedKeyPress(KeyEvent.VK_W);
        robot.delayedKeyPress(KeyEvent.VK_I);
        robot.delayedKeyPress(KeyEvent.VK_T);
        robot.delayedKeyPress(KeyEvent.VK_T);
        robot.delayedKeyPress(KeyEvent.VK_E);
        robot.delayedKeyPress(KeyEvent.VK_R);
        robot.delayedKeyPress(KeyEvent.VK_PERIOD);
        robot.delayedKeyPress(KeyEvent.VK_C);
        robot.delayedKeyPress(KeyEvent.VK_O);
        robot.delayedKeyPress(KeyEvent.VK_M);
        robot.delayedKeyPress(KeyEvent.VK_SLASH);
        robot.delayedKeyPress(KeyEvent.VK_ENTER);

        robot.delayedKeyPress(KeyEvent.VK_ENTER);

        robot.delay(3000);
        robot.mouseGlide(600,60, 750, 230, 8, 1000);
        robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
        robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);

        robot.instantType(tweet);

        robot.mouseGlide(750,230, 1250, 360, 8, 1000);

        robot.delay(3000);
        robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
        robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);

Conclusion

Avec une fonctionnalité aussi simple, c'est une tâche automatique basée sur le système d'exploitation, et les possibilités sont nombreuses.

J'ai hâte de faire des choses plus créatives avec ça!

Recommended Posts

Faisons un robot! "Une simple démo de Java AWT Robot"
[Java] Créons une bibliothèque d'accès à la base de données!
Une collection de questions simples pour les débutants Java
Créez "Je ne suis pas un robot" en Java EE (Jakarta EE)
[Bases de Java] Créons un triangle avec une instruction for
[Mémo personnel] Créez une copie complète simple avec Java
[Java] Rendez-le constant
[Java] Dessine un motif simple
Faire un diamant en utilisant Java
Faisons une application de calcul avec Java ~ Afficher la fenêtre de l'application
[Débutant] Essayez de créer un jeu RPG simple avec Java ①
Faisons une API simple avec EC2 + RDS + Spring boot ①
J'ai créé un client RESAS-API en Java
Pensez à une stratégie de mise à jour Java
Créons une application TODO en Java 4 Implémentation de la fonction de publication
Faites une langue! (Faire une simple calculatrice ②)
Essayez de faire un simple rappel
3 Implémentez un interpréteur simple en Java
Comment créer un conteneur Java
Créons une application TODO en Java 6 Implémentation de la fonction de recherche
[Java] Jetons un coup d'œil aux expressions de commutation (aperçu) du JDK 13.
Créons une application TODO en Java 8 Implémentation des fonctions d'édition
Trier la liste des objets Java
Un exemple simple de rappels en Java
Faites une langue! (Faire une simple calculatrice ①)
Une brève description des dépendances JAVA
Créons une application TODO avec Java 1 Brève explication de MVC
Créons une application TODO en Java 5 Changer l'affichage de TODO
Faisons un custom_cop qui souligne le tremblement du nom
Comment créer un tableau Java
Exprimons le résultat de l'analyse du code d'octet Java dans un diagramme de classes
J'étais accro à un simple test de Jedis (bibliothèque Java-> Redis)
Un débutant Java a essayé de créer une application Web simple à l'aide de Spring Boot
Comment créer un résumé de calendrier Java
Faisons une carte de Noël avec Processing!
Nommer un groupe d'expressions régulières (Java)
Un simple échantillon d'ArBiMap (carte bidirectionnelle)
Créons un environnement de développement Java (mise à jour)
Comment créer un robot Discord (Java)
[docker] [nginx] Créer un ALB simple avec nginx
Migrons pour rendre Java plus confortable
Un exemple simple du modèle MVC
Créons Force-Graph du réseau ferroviaire à partir des données ouvertes des transports publics de Tokyo
Faisons une application de calculatrice avec Java ~ Créez une zone d'affichage dans la fenêtre
J'ai essayé de faire un jeu simple avec Javafx ① "Trouvons le jeu du bonheur" (inachevé)
Un exemple simple de servlet qui affiche le japonais
Créez un tableau d'affichage simple avec Java + MySQL
Avez-vous besoin d'une implémentation de Java compatible avec la mémoire?
Créons un processus chronométré avec la minuterie de Java! !!
Faire une marge à gauche du TextField
java j'ai essayé de casser un simple bloc
Mesurer la taille d'un dossier avec Java
Je l'ai fait en Java pour toujours rendre (a == 1 && a == 2 && a == 3) vrai
Faisons un site de shopping en utilisant Stripe! (Achat)
Créons un framework Web ultra-simple avec Java
[Java] Créons un Minecraft Mod 1.14.4 [Introduction]
Créer Scala Seq à partir de Java, faire de Scala Seq une liste Java
[Java] Créons un Minecraft Mod 1.16.1 [Introduction]
Faisons une fonction de recherche avec Rails (ransack)