Plusieurs fois, nous espérons implémenter des tests automatiques, des fonctions de démonstration automatique ou d'autres applications de contrôle de souris et de clavier (comme aider les gens à cliquer sur les publicités pour réaliser des bénéfices, etc.). À cette fin, depuis JDK1.3, il nous a fourni un robot qui génère des événements d'entrée natifs - java.awt.robot.
Ci-dessous, je présenterai les fonctions de Robot et les exemples d'application en détail:
1. Fonctions principales du robot
1. BufferedImage CreateScreencapture (Rectangle ScreenRect)
Remarque: Cette méthode fournit une fonction similaire à la touche PrintScreen sur le clavier, en copie les pixels d'écran dans la zone rectangulaire spécifiée pour générer un tampon.
Application: Nous pouvons utiliser cette méthode dans un programme graphique, ou l'utiliser pour réaliser la transmission d'écran à distance, qui peut être transformée en un programme de surveillance d'ordinateur à distance, etc.
2. Délai de vide (INT MS)
Description: Utilisé pour dormir le programme actuel (thread) pendant plusieurs millisecondes (MS).
Application: peut être utilisée pour contrôler le retard du programme. Cela est généralement nécessaire car vous aurez certainement un retard dans les deux opérations d'intervalle.
3. Color getPixelColor (int x, int y)
Description: Obtenez la valeur de couleur de la position des pixels des coordonnées d'écran donné.
Application: prenez simplement la valeur RVB couleur, donc je ne dirai pas grand-chose.
4. VOID Keypress (int keycode)
vide keyrelease (int keycode)
Remarque: Vous pouvez voir les fonctions de ces deux méthodes en un coup d'œil. Les actions d'appui et de levage utilisées utilisées pour générer la touche spécifiée sont équivalentes à la fonction KEYB_EVENT de l'API Win32, c'est-à-dire pour simuler les opérations du clavier. Les valeurs KeyCode spécifiques sont keyevent.vk_c, keyevent.vk_d, keyevent.vk_control, etc. Lorsque vous appliquez l'application spécifique, vous le saurez en regardant l'invite Eclipse.
Application: Il peut être utilisé pour la démonstration automatique, les tests, etc. des programmes, ce qui est très utile.
5. VOID MOUSEMOVE (INT X, INT Y)
Description: Déplacez le curseur de la souris vers les coordonnées d'écran spécifiées.
Application: Il peut être utilisé pour la démonstration automatique, les tests, etc. du programme et est indispensable pour une utilisation avec d'autres méthodes.
6. Mouspresse vide (boutons int)
vide Mouselelease (boutons int)
Vide Mouse-Wheel (int wateamt)
Remarque: Les trois méthodes ci-dessus génèrent le mouvement d'appuyer, de levage et de la roue de défilement du bouton de souris spécifié, ce qui simule le fonctionnement de la souris. Les valeurs de boutons spécifiques incluent inputevent.button1_mask (bouton gauche de la souris), inputevent.button3_mask (bouton de souris droit, s'il s'agit d'une souris à double clé, veuillez utiliser inputevent.button2_mask à la place).
Application: Il peut également être utilisé pour la démonstration automatique, les tests, etc. du programme. Il est très important de l'utiliser en conjonction avec d'autres méthodes.
2. Exemples d'application
J'ai écrit deux exemples d'application relativement petits, l'un est un test de simulation simple, et l'autre consiste à cliquer automatiquement sur les publicités pour réaliser des bénéfices. Voici des démonstrations.
Écrivez d'abord quelques méthodes communes communes.java
Package Com.Alexa; import java.awt.rectangle; Importer Java.awt.Robot; import java.awt.toolkit; import java.awt.event.inputevent; Importer java.awt.event.KeyEvent; Importer java.awt.image.bufferedImage; Importer javax.swing.icon; import javax.swing.imageicon; / ** * @Description Robot Help Class pour implémenter des fonctions de base * @author alexia * @date 2013/5/18 * * / public class Common {/ ** * Mouse cliquez (clic gauche), et si vous souhaitez double-cliquer, vous appellerez continu * * @param r * @param x * x COORDINATE POSE * @param y * y coordonnée position * @Param Retail * Retail Time After this Operation * @param y * y coordinate Position ClickLMouse (Robot R, int x, int y, intlay) {R.MousMove (x, y); R.MousePress (inputevent.button1_mask); R.Delay (10); R.MousseRelease (inputevent.button1_mask); R.Delay (retard); } / ** * Cliquez avec le bouton droit sur la souris, et si vous souhaitez double-cliquez, appelez en continu * * @param r * @param x * x Position de coordonnées * @param y * y coordonnée position * @param retard * Temps de retard après cette opération * / R.Melow Static ClickrMouse (Robot R, int x, int y, intlade) {R.MouseMove (x, y); R.MousePress (inputevent.button3_mask); R.Delay (10); R.MousseRelease (inputevent.button3_mask); R.Delay (retard); } / ** * Entrée du clavier (un seul caractère peut être entré à la fois) * * @param r * @param ks * tableau de caractères entré par clavier * @param delact * Temps de retard après être entré dans une clé * / public static void presskeys (robot r, int [] ks, int. R.Delay (10); R.KeyyRelease (KS [i]); R.Delay (retard); }} / ** * Copy * * @param r * @throws interruptedException * / void docopy (robot r) lève l'interruptException {thread.sleep (3000); R.SetAutodelay (200); R.KeyPress (KeyEvent.vk_Control); r.KeyPress (keyevent.vk_c); R.KeyRelease (KeyEvent.vk_Control); R.KeyyRelease (keyEvent.vk_c); } / ** * Paste * * @param r * @Throws InterruptedException * / void doparse (robot r) lève InterruptedException {R.SetAutodelay (500); Thread.Sleep (2000); R.MouseMove (300, 300); R.MousePress (inputevent.button1_mask); R.MousseRelease (inputevent.button1_mask); R.KeyPress (KeyEvent.vk_Control); R.KeyPress (keyEvent.vk_v); R.KeyRelease (KeyEvent.vk_Control); R.KeyyRelease (KeyEvent.vk_v); } / ** * Capture Full Screen Moo * * @param r * @return * / public icon capturefullScreen (robot r) {bufferedImage fullScreenImage = R.CreateSCreencapture (new rectangle (toolkit.getDefaultToolkit (). GetScreensize ()); ImageIcon icon = new ImageIcon (FullScreenImage); Icône de retour; } / ** * Capturez une zone orthopédique de l'écran * * @param r * @param x * x Position de coordonnées * @param y * y Position de coordonnées * @param width * Width of the Rectangle * @param height * hauteur du rectangle * @return * / public icon capturePartsScreen (x, int x, int y, int y); BufferedImage FullScreenImage = R.CreateSCreencapture (nouveau rectangle (largeur, hauteur)); ImageIcon icon = new ImageIcon (FullScreenImage); Icône de retour; }}Avant l'exemple, veuillez prêter attention à la façon de déterminer la position de coordonnée de l'écran. J'ai téléchargé un gadget, ce qui est très pratique à utiliser. Il est recommandé de l'utiliser.
1. Test de simulation simple
Package Com.Alexia; import java.awt. *; import java.awt.event. *; import javax.swing.joptionpane; classe publique SimpleTest {public static void main (String [] args) lève une exception {final robot rb = new robot (); nouveau thread () {public void run () {rb.delay (2000); // Simuler le retour du chariot RB.KeyPress (keyEvent.vk_enter); rb.keyrelease (keyevent.vk_enter); } }.commencer(); RB.Delay (3000); // Définissez la position approximative du menu Démarrer int x = 40; int y = toolkit.getDefaultToolkit (). getScreenSize (). High - 10; // Déplacez la souris vers le menu Démarrer, RB.MousMove (x, y); RB.Delay (500); // Cliquez sur le menu Démarrer Common.ClicklMouse (RB, X, Y, 500); RB.Delay (1000); // Exécutez la commande cmd cmd entrent int [] ks = {keyevent.vk_c, keyevent.vk_m, keyevent.vk_d, keyevent.vk_enter,}; Common.PressKeys (RB, KS, 500); RB.MousMove (400, 400); RB.Delay (500); // Exécutez la commande dir dir enter ks = new int [] {keyevent.vk_d, keyevent.vk_i, keyevent.vk_r, keyevent.vk_enter}; Common.PressKeys (RB, KS, 500); RB.Delay (1000); // Exécutez la commande CLS CLS ENTER KS = new int [] {keyEvent.vk_c, keyevent.vk_l, keyevent.vk_s, keyevent.vk_enter}; Common.PressKeys (RB, KS, 500); RB.Delay (1000); // Exécutez la commande exit exit enter ks = new int [] {keyevent.vk_e, keyevent.vk_x, keyevent.vk_i, keyevent.vk_t, keyevent.vk_enter}; Common.PressKeys (RB, KS, 500); RB.Delay (1000); // clic droit pour tester x = toolkit.getDefaultToolkit (). GetScreensize (). Largeur - 50; Common.clickrMouse (RB, X, Y, 500); nouveau thread () {public void run () {rb.delay (1000); // entre rb.keyPress (keyevent.vk_enter); rb.keyrelease (keyevent.vk_enter); } }.commencer(); JOptionPane.showMessageDialog (null, "Demo est fini!"); }} 2. Cliquez sur la publicité NetEase pour réaliser un maigre profit
Package Com.Alexia; import java.awt.awtexception; import java.awt.desktop; Importer Java.awt.Robot; Importer java.awt.event.KeyEvent; Importer java.io.ioException; importer java.net.uri; import java.util.random; classe publique AutoClickads {robot de robot privé; Stop booléen volatile privé = false; / ** crée une nouvelle instance de Main * / public AutoClickads () {try {robot = new Robot (); } catch (awtexception ex) {ex.printStackTrace (); }} public void init () {robot.delay (3000); System.out.println ("Cliquez sur les annonces Démarrer"); // Ouvrez l'URL spécifiée dans une nouvelle fenêtre de navigateur ou une fenêtre de navigateur existant (JDK 1.6 ou supérieur) Desktop Desktop = Desktop.getDesktop (); if (Desktop.isdeskTopSupported () && Desktop.issupported (Desktop.action.browse)) {uri uri = uri.create ("http://lanxuezaipiao.blog.163.com/"); essayez {Desktop.Browse (uri); } catch (ioException e) {// TODO Bloc de capture généré automatiquement e.printStackTrace (); }} essayez {run (); } Catch (InterruptedException e) {// TODO Block de catch généré automatiquement e.printStackTrace (); } arrêt(); System.out.println ("Cliquez sur les annonces arrêtées"); } public void run () lance InterruptedException {int count = 1; while (! stop) {robot.delay (8000); int x = 576; int y = 567; Random r = new Random (); Common.clicklmouse (robot, x, y, 3000); // Entrez la flèche vers le bas pour réaliser la page Turn int [] ks = {keyEvent.vk_down}; pour (int i = 0; i <10; i ++) Common.pressKeys (robot, ks, 0); int [] [] a = {{500, 103}, {500, 163}, {500, 223}, {500, 283}, {500, 343}, {500, 403}, {500, 463}, {500, 523}, {500, 583}, {500, 643,, {500, 583}, {500, 643,; int b = r.Nextint (5); x = a [b] [0]; y = a [b] [1]; Common.clicklMouse (robot, x, y, 1000); // Entrez la flèche vers le bas pour atteindre le tour de page pour (int i = 0; i <500; i ++) Common.pressKeys (robot, ks, 0); // Entrez la flèche vers le bas pour atteindre la page Turn int [] kups = {keyEvent.vk_up}; pour (int i = 0; i <3; i ++) Common.pressKeys (robot, kups, 0); x = 900; y = 210; Common.clicklmouse (robot, x, y, 3000); x = 1090; y = 15; Common.clicklmouse (robot, x, y, 3000); x = 900; y = 135; Common.clicklmouse (robot, x, y, 3000); System.out.println ("Cliquez avec succès" + Count + "Publicités!"); }} public synchronisé void stop () {stop = true; } / ** * * @param args Les arguments de ligne de commande * * @throws interruptedException * / public static void main (String [] args) lance InterruptedException {autoclickads mc = new AutoClickads (); Mc.init (); }}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.