亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java Robot應用示例之機器人功能

2024-07-13 10:17:32
字體:
來源:轉載
供稿:網友

很多時候,我們希望能夠實現自動測試,自動演示功能,或者是其它的一些鼠標和鍵盤控制的應用(比如幫人點擊廣告賺利潤等)。出于這樣的目的,自從JDK1.3開始,它就為我們提供了一個用來產生本機輸入事件的機器人類 — java.awt.Robot. 

  下面我來詳細介紹Robot的功能及應用示例:

一、Robot主要的功能

1. BufferedImage createScreenCapture(Rectangle screenRect) 

說明:該方法提供類似于鍵盤上的PrintScreen鍵的功能,將指定矩形區域內的屏幕像素copy下來產生一個BufferedImage。
應用:我們可以將這個方法用在圖形程序中,或是用它來實現遠端屏幕傳輸,可做成遠端電腦監控程序等.

2. void delay(int ms)

說明:用來將當前的程序(thread)休眠(sleep)若干毫秒(ms)。
應用:可用來控制程序的延時。這個一般是必須的,因為你在兩次間隔操作中肯定有延時。

3. Color getPixelColor(int x, int y)

說明:取得給定屏幕坐標像素位置的顏色值。
應用:就是取顏色RGB值,就不多說了。

4. void keyPress(int keycode)
 void keyRelease(int keycode)

說明:這兩個方法的作用一看便知,用來產生指定鍵的按鍵按下與抬起動作,相當于Win32 API的keyb_event函數,即模擬鍵盤操作咯,具體keycode值就是KeyEvent.VK_C、KeyEvent.VK_D、KeyEvent.VK_CONTROL什么的,具體應用時直接看Eclipse提示就知道了。
應用:可用于程序的自動演示、測試等,非常有用。

5. void mouseMove(int x, int y)

說明:將鼠標光標移動到指定的屏幕坐標。
應用:可用于程序的自動演示、測試等,配合其他的方法使用,是不可缺少的。

6. void mousePress(int buttons)
 void mouseRelease(int buttons)
 void mouseWheel(int wheelAmt)

說明:上面的三種方法,產生指定鼠標按鈕的按下,抬起,及滾輪動作,就是模擬鼠標操作咯,具體buttons的值有InputEvent.BUTTON1_MASK(鼠標左鍵)、InputEvent.BUTTON3_MASK(鼠標右鍵,如果是雙鍵鼠標,請改用InputEvent.BUTTON2_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();    } } 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品大尺度| 91亚洲国产成人久久精品网站| 国产精品热视频| 在线播放国产精品| 国产国语刺激对白av不卡| 色老头一区二区三区在线观看| 曰本色欧美视频在线| 亚洲xxxxx性| 亚洲成人在线视频播放| 在线播放亚洲激情| 91精品视频观看| 精品视频在线播放免| 亚洲色图在线观看| 亚洲欧美国产另类| 久久婷婷国产麻豆91天堂| 亚洲影影院av| 国产亚洲欧美日韩精品| 亚洲午夜激情免费视频| 亚洲国产成人精品久久久国产成人一区| 欧美理论电影在线观看| 国产成人精品综合| 亚洲综合一区二区不卡| 色偷偷av一区二区三区| 色噜噜国产精品视频一区二区| 欧美日在线观看| 国产成人精品一区二区在线| 精品久久久久久久久久久久久久| 九九热这里只有在线精品视| 成人精品一区二区三区电影黑人| 日韩网站免费观看高清| 亚洲色图国产精品| 清纯唯美亚洲激情| 国产精品成人v| 国产一区二区三区高清在线观看| 日韩国产精品视频| 日韩成人av在线| 欧美国产日韩二区| 久久久精品免费视频| 国产91精品青草社区| 国产成人鲁鲁免费视频a| 精品调教chinesegay| 国产精品一区二区三区在线播放| 欧美日韩精品中文字幕| 91精品国产综合久久香蕉最新版| 午夜精品久久久久久久久久久久| 欧美精品久久一区二区| 亚洲精品ady| 一区二区三区国产视频| 欧美激情视频在线免费观看 欧美视频免费一| 欧美日韩免费看| 亚洲日本中文字幕免费在线不卡| 97人洗澡人人免费公开视频碰碰碰| 97精品久久久| 国产精品一二三在线| 国产精品视频白浆免费视频| 久操成人在线视频| 欧美天天综合色影久久精品| 91美女高潮出水| 亚洲无限乱码一二三四麻| 亚洲自拍小视频| 免费97视频在线精品国自产拍| 国产偷国产偷亚洲清高网站| 欧美视频专区一二在线观看| 亚洲精品电影在线观看| 亚洲老板91色精品久久| 色老头一区二区三区在线观看| 国产丝袜一区视频在线观看| 久久国产精品久久久久| 2019中文字幕全在线观看| 欧美激情精品久久久久久免费印度| 91精品国产九九九久久久亚洲| www.美女亚洲精品| 久久久久久久久国产精品| 久久精品视频网站| 国产日韩在线看| 91最新国产视频| 亚洲视频综合网| 国产欧美日韩免费看aⅴ视频| 国产成人久久久| 久久不射热爱视频精品| 亚洲变态欧美另类捆绑| 国内精品美女av在线播放| 在线播放日韩专区| 亚洲日本aⅴ片在线观看香蕉| 免费91在线视频| 色噜噜国产精品视频一区二区| 亚洲精品美女视频| 国产精品pans私拍| 亚洲成人999| 77777亚洲午夜久久多人| 欧美日韩亚洲视频一区| 国产精品va在线播放我和闺蜜| 国产亚洲aⅴaaaaaa毛片| 亚洲xxxx3d| 国产精品综合网站| 91高潮精品免费porn| 欧美中文字幕第一页| 91久久精品国产91久久性色| 欧美亚洲国产日韩2020| 精品日本美女福利在线观看| 福利微拍一区二区| 欧美电影在线免费观看网站| 欧美裸体xxxx极品少妇软件| 久久久久亚洲精品成人网小说| 成人国产在线视频| 亚洲精品二三区| 国产精品旅馆在线| 亚洲色图15p| 欧美大荫蒂xxx| 日韩电影在线观看永久视频免费网站| 国产亚洲美女精品久久久| 色综合老司机第九色激情| 亚洲风情亚aⅴ在线发布| 亚洲v日韩v综合v精品v| 久久激情视频久久| 国产精品第七十二页| 欧美精品久久一区二区| 久久精品成人欧美大片古装| 久久精品国产一区二区电影| 91免费的视频在线播放| 热久久美女精品天天吊色| 中文字幕在线成人| 日韩动漫免费观看电视剧高清| 久久色免费在线视频| 亚洲午夜色婷婷在线| 国产亚洲激情在线| 精品在线小视频| 亚洲国产精品va在线| 日韩精品视频免费在线观看| 国产一区二区日韩精品欧美精品| 国产美女91呻吟求| 国产一级揄自揄精品视频| 欧美性在线视频| 欧美国产日韩在线| 永久免费毛片在线播放不卡| 亚洲电影中文字幕| 亚洲性日韩精品一区二区| 国产91精品黑色丝袜高跟鞋| 亚洲欧洲激情在线| 亚洲人成绝费网站色www| 欧美放荡办公室videos4k| 亚洲欧美日韩天堂| 国产精品久久久久av免费| 8050国产精品久久久久久| 成人免费在线网址| 97超级碰碰碰久久久| 国产精品久久久久久av| 精品久久久久久亚洲精品| 日韩在线观看av| 主播福利视频一区| 欧美黄色片免费观看| 国产精品女人久久久久久| 81精品国产乱码久久久久久| 国产精品高清网站| 91禁外国网站| 成人乱人伦精品视频在线观看| 国产日韩换脸av一区在线观看| 上原亚衣av一区二区三区| 国产精品综合久久久| 日韩电影在线观看中文字幕| 久久久久久美女| 中文字幕国产日韩| 国产精品高清在线观看| 26uuu国产精品视频|