Java Robot応用例のロボット機能


多くの場合、私たちは自動テスト、自動デモンストレーション機能、または他のマウスやキーボードコントロールのアプリケーション(広告をクリックして利益を得るなど)を実現したいです。このような目的のために、JDK 1.3から、私達のために本機の入力事件を発生するための機械人間、java.awt.Robotを提供してくれました。
以下、Robotの機能及び応用例を詳しく紹介します。
一、Robotの主な機能
1.BufferedImage createScrenCapture(Rectangle screenRect) 
説明:この方法は、キーボード上のPrintScreenキーと同様の機能を提供し、長方形領域内のスクリーンピクセルcopyを指定して、バッファeredImageを生成する。
アプリケーション:私達はこの方法をグラフィックスプログラムに使うことができます。あるいはそれを使って遠端スクリーンの伝送を実現します。遠端コンピュータの監視プログラムなどを作ることができます。
2.void delay(int ms)
説明:現在のプログラムをいくつかのミリ秒(ms)で休止させるために使用します。
アプリケーション:プログラムの遅延を制御するために使用できます。これは普通必要です。二回の間隔で操作すると必ず遅延があります。
3.Color get PixelColor(int x,int y)
説明:指定されたスクリーン座標のピクセル位置の色値を取得します。
色RGBの値を取るということです。多くは言いません。
4.void keyPress(int keycode)
void keyRelease(int keycode)
説明:この2つの方法の役割は一見してわかるように、指定されたキーを生成するためのキーの押下と持ち上げの動作は、Win 32 APIのkeyba_に相当する。イベント関数は、アナログキーボード操作です。具体的なkeycode値はKeyEvent.VK_です。C、KeyEvent.VK_D、KeyEvent.VK_CONTROLとか、具体的なアプリケーションは直接Eclipseのヒントを見れば分かります。
アプリケーション:プログラムの自動デモンストレーション、テストなどに使用できます。とても役に立ちます。
5.void mouse Move(int x,int y)
説明:マウスカーソルを指定されたスクリーン座標に移動します。
アプリケーション:プログラムに使える自動プレゼンテーション、テストなど、他の方法に合わせて使うことが不可欠です。
6.void mousePress(int buttons)
void mouse Release(int buttons)
void mouseWheel(int wheelAmt)
説明:上の3つの方法は、マウスボタンを指定して押すこと、持ち上げること、およびローラーアクションを生成します。マウス操作をシミュレートします。具体的なbuttonsの値はInputEvent.BUTOn 1_があります。MASK(マウス左ボタン)、InputEvent.BUTOn 3_MASK(マウスの右ボタン、ダブルマウスなら、InputEvent.BUTOn 2_に変えてください。MASK等。
アプリケーション:同様にプログラムの自動デモンストレーション、テストなどにも使えます。他の方法に合わせて使うことが重要です。
二、応用例
二つの比較的小さい応用例を書きました。一つは簡単な模擬テストで、一つは自動クリックで広告を儲けて利益を得て、次はそれぞれプレゼンテーションします。
まずいくつかの共通の方法のCommon.javaを編纂します。

package com.alexia; 
 
import java.awt.Rectangle; 
import java.awt.Robot; 
import java.awt.Toolkit; 
import java.awt.event.InputEvent; 
import java.awt.event.KeyEvent; 
import java.awt.image.BufferedImage; 
 
import javax.swing.Icon; 
import javax.swing.ImageIcon; 
 
/** 
 * @description Robot   ,        
 * @author Alexia 
 * @date 2013/5/18 
 * 
 */ 
public class Common { 
 
  /** 
   *     (  ),         
   * 
   * @param r 
   * @param x 
   *      x     
   * @param y 
   *      y     
   * @param delay 
   *                
   */ 
  public static void clickLMouse(Robot r, int x, int y, int delay) { 
    r.mouseMove(x, y); 
    r.mousePress(InputEvent.BUTTON1_MASK); 
    r.delay(10); 
    r.mouseRelease(InputEvent.BUTTON1_MASK); 
    r.delay(delay); 
 
  } 
 
  /** 
   *     ,         
   * 
   * @param r 
   * @param x 
   *      x     
   * @param y 
   *      y     
   * @param delay 
   *                
   */ 
  public static void clickRMouse(Robot r, int x, int y, int delay) { 
    r.mouseMove(x, y); 
    r.mousePress(InputEvent.BUTTON3_MASK); 
    r.delay(10); 
    r.mouseRelease(InputEvent.BUTTON3_MASK); 
    r.delay(delay); 
 
  } 
 
  /** 
   *     (          ) 
   * 
   * @param r 
   * @param ks 
   *                
   * @param delay 
   *                  
   */ 
  public static void pressKeys(Robot r, int[] ks, int delay) { 
    for (int i = 0; i < ks.length; i++) { 
      r.keyPress(ks[i]); 
      r.delay(10); 
      r.keyRelease(ks[i]); 
      r.delay(delay); 
    } 
  } 
 
  /** 
   *    
   * 
   * @param r 
   * @throws InterruptedException 
   */ 
  void doCopy(Robot r) throws InterruptedException { 
    Thread.sleep(3000); 
    r.setAutoDelay(200); 
    r.keyPress(KeyEvent.VK_CONTROL); 
    r.keyPress(KeyEvent.VK_C); 
    r.keyRelease(KeyEvent.VK_CONTROL); 
    r.keyRelease(KeyEvent.VK_C); 
  } 
 
  /** 
   *    
   * 
   * @param r 
   * @throws InterruptedException 
   */ 
  void doParse(Robot r) throws InterruptedException { 
    r.setAutoDelay(500); 
    Thread.sleep(2000); 
    r.mouseMove(300, 300); 
    r.mousePress(InputEvent.BUTTON1_MASK); 
    r.mouseRelease(InputEvent.BUTTON1_MASK); 
    r.keyPress(KeyEvent.VK_CONTROL); 
    r.keyPress(KeyEvent.VK_V); 
    r.keyRelease(KeyEvent.VK_CONTROL); 
    r.keyRelease(KeyEvent.VK_V); 
  } 
 
  /** 
   *       
   * 
   * @param r 
   * @return 
   */ 
  public Icon captureFullScreen(Robot r) { 
    BufferedImage fullScreenImage = r.createScreenCapture(new Rectangle( 
        Toolkit.getDefaultToolkit().getScreenSize())); 
    ImageIcon icon = new ImageIcon(fullScreenImage); 
    return icon; 
  } 
 
  /** 
   *             
   * 
   * @param r 
   * @param x 
   *      x     
   * @param y 
   *      y     
   * @param width 
   *           
   * @param height 
   *           
   * @return 
   */ 
  public Icon capturePartScreen(Robot r, int x, int y, int width, int height) { 
    r.mouseMove(x, y); 
    BufferedImage fullScreenImage = r.createScreenCapture(new Rectangle( 
        width, height)); 
    ImageIcon icon = new ImageIcon(fullScreenImage); 
    return icon; 
  } 
 
} 

例の前に、画面の座標位置がどうなるかに注意してください。私はツールをダウンロードしました。使いやすいです。ご利用をお勧めします。
1.簡単なシミュレーションテスト

package com.alexia; 
 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.JOptionPane; 
 
public class SimpleTest { 
   
  public static void main(String[] args) throws Exception { 
 
    final Robot rb = new Robot(); 
 
    new Thread() { 
      public void run() { 
        rb.delay(2000); //      
        rb.keyPress(KeyEvent.VK_ENTER); 
        rb.keyRelease(KeyEvent.VK_ENTER); 
      } 
    }.start(); 
 
    rb.delay(3000); 
 
    //             
    int x = 40; 
    int y = Toolkit.getDefaultToolkit().getScreenSize().height - 10; //          , 
    rb.mouseMove(x, y); 
    rb.delay(500); 
 
    //        
    Common.clickLMouse(rb, x, y, 500); 
     
    rb.delay(1000); 
 
    //   CMD  cmd enter 
    int[] ks = { KeyEvent.VK_C, KeyEvent.VK_M, 
        KeyEvent.VK_D, KeyEvent.VK_ENTER, }; 
    Common.pressKeys(rb, ks, 500); 
    rb.mouseMove(400, 400); 
    rb.delay(500); 
 
    //   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); 
 
    //   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); 
 
    //   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); 
 
    //      
    x = Toolkit.getDefaultToolkit().getScreenSize().width - 50; 
    Common.clickRMouse(rb, x, y, 500); 
 
    new Thread() { 
      public void run() { 
        rb.delay(1000); //    
        rb.keyPress(KeyEvent.VK_ENTER); 
        rb.keyRelease(KeyEvent.VK_ENTER); 
      } 
    }.start(); 
 
    JOptionPane.showMessageDialog(null, "    !"); 
  } 
} 
2.網易広告をクリックして微利益を上げる。

package com.alexia; 
 
import java.awt.AWTException; 
import java.awt.Desktop; 
import java.awt.Robot; 
import java.awt.event.KeyEvent; 
import java.io.IOException; 
import java.net.URI; 
import java.util.Random; 
 
public class AutoClickAds { 
 
  private Robot robot; 
 
  private volatile boolean stop = false; 
 
  /** Creates a new instance of Main */ 
 
  public AutoClickAds() { 
 
    try { 
 
      robot = new Robot(); 
 
    } catch (AWTException ex) { 
 
      ex.printStackTrace(); 
 
    } 
  } 
 
  public void init() { 
 
    robot.delay(3000); 
     
    System.out.println("Click Ads start"); 
 
    //                        URL(JDK 1.6  ) 
    Desktop desktop = Desktop.getDesktop(); 
    if (Desktop.isDesktopSupported() && desktop.isSupported(Desktop.Action.BROWSE)) { 
      URI uri = URI.create("http://lanxuezaipiao.blog.163.com/"); 
      try { 
        desktop.browse(uri); 
      } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
      } 
    } 
     
    try { 
      run(); 
    } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
 
    stop(); 
 
    System.out.println("Click Ads stoped"); 
 
  } 
 
  public void run() throws 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); 
 
      //       ,     
      int[] ks = { KeyEvent.VK_DOWN }; 
      for (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 }, }; 
      int b = r.nextInt(5); 
      x = a[b][0]; 
      y = a[b][1]; 
 
      Common.clickLMouse(robot, x, y, 1000); 
 
      //       ,     
      for (int i = 0; i < 500; i++) 
        Common.pressKeys(robot, ks, 0); 
 
      //       ,     
      int[] kups = { KeyEvent.VK_UP }; 
      for (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("     " + count + "   !"); 
    } 
 
  } 
 
  public synchronized void stop() { 
 
    stop = true; 
 
  } 
 
  /** 
   * * @param args the command line arguments 
   * 
   * @throws InterruptedException 
   */ 
  public static void main(String[] args) throws InterruptedException { 
 
    AutoClickAds mc = new AutoClickAds(); 
    mc.init(); 
 
  } 
} 
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。