国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開發(fā) > Java > 正文

Java Robot應(yīng)用示例之機(jī)器人功能

2024-07-14 08:39:44
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

很多時(shí)候,我們希望能夠?qū)崿F(xiàn)自動(dòng)測(cè)試,自動(dòng)演示功能,或者是其它的一些鼠標(biāo)和鍵盤控制的應(yīng)用(比如幫人點(diǎn)擊廣告賺利潤(rùn)等)。出于這樣的目的,自從JDK1.3開始,它就為我們提供了一個(gè)用來(lái)產(chǎn)生本機(jī)輸入事件的機(jī)器人類 — java.awt.Robot. 

  下面我來(lái)詳細(xì)介紹Robot的功能及應(yīng)用示例:

一、Robot主要的功能

1. BufferedImage createScreenCapture(Rectangle screenRect) 

說(shuō)明:該方法提供類似于鍵盤上的PrintScreen鍵的功能,將指定矩形區(qū)域內(nèi)的屏幕像素copy下來(lái)產(chǎn)生一個(gè)BufferedImage。
應(yīng)用:我們可以將這個(gè)方法用在圖形程序中,或是用它來(lái)實(shí)現(xiàn)遠(yuǎn)端屏幕傳輸,可做成遠(yuǎn)端電腦監(jiān)控程序等.

2. void delay(int ms)

說(shuō)明:用來(lái)將當(dāng)前的程序(thread)休眠(sleep)若干毫秒(ms)。
應(yīng)用:可用來(lái)控制程序的延時(shí)。這個(gè)一般是必須的,因?yàn)槟阍趦纱伍g隔操作中肯定有延時(shí)。

3. Color getPixelColor(int x, int y)

說(shuō)明:取得給定屏幕坐標(biāo)像素位置的顏色值。
應(yīng)用:就是取顏色RGB值,就不多說(shuō)了。

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

說(shuō)明:這兩個(gè)方法的作用一看便知,用來(lái)產(chǎn)生指定鍵的按鍵按下與抬起動(dòng)作,相當(dāng)于Win32 API的keyb_event函數(shù),即模擬鍵盤操作咯,具體keycode值就是KeyEvent.VK_C、KeyEvent.VK_D、KeyEvent.VK_CONTROL什么的,具體應(yīng)用時(shí)直接看Eclipse提示就知道了。
應(yīng)用:可用于程序的自動(dòng)演示、測(cè)試等,非常有用。

5. void mouseMove(int x, int y)

說(shuō)明:將鼠標(biāo)光標(biāo)移動(dòng)到指定的屏幕坐標(biāo)。
應(yīng)用:可用于程序的自動(dòng)演示、測(cè)試等,配合其他的方法使用,是不可缺少的。

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

說(shuō)明:上面的三種方法,產(chǎn)生指定鼠標(biāo)按鈕的按下,抬起,及滾輪動(dòng)作,就是模擬鼠標(biāo)操作咯,具體buttons的值有InputEvent.BUTTON1_MASK(鼠標(biāo)左鍵)、InputEvent.BUTTON3_MASK(鼠標(biāo)右鍵,如果是雙鍵鼠標(biāo),請(qǐng)改用InputEvent.BUTTON2_MASK)等。

應(yīng)用:一樣也可用于程序的自動(dòng)演示、測(cè)試等,配合其他方法使用,很重要。

二、應(yīng)用實(shí)例

我寫了兩個(gè)比較小的應(yīng)用實(shí)例,一個(gè)是簡(jiǎn)單的模擬測(cè)試,一個(gè)是自動(dòng)點(diǎn)擊廣告賺利潤(rùn)的,下面分別演示。

首先編寫一些公用的方法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幫助類,實(shí)現(xiàn)基本的功能  * @author Alexia  * @date 2013/5/18  *  */ public class Common {    /**    * 鼠標(biāo)單擊(左擊),要雙擊就連續(xù)調(diào)用    *    * @param r    * @param x    *      x坐標(biāo)位置    * @param y    *      y坐標(biāo)位置    * @param delay    *      該操作后的延遲時(shí)間    */   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);    }    /**    * 鼠標(biāo)右擊,要雙擊就連續(xù)調(diào)用    *    * @param r    * @param x    *      x坐標(biāo)位置    * @param y    *      y坐標(biāo)位置    * @param delay    *      該操作后的延遲時(shí)間    */   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);    }    /**    * 鍵盤輸入(一次只能輸入一個(gè)字符)    *    * @param r    * @param ks    *      鍵盤輸入的字符數(shù)組    * @param delay    *      輸入一個(gè)鍵后的延遲時(shí)間    */   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);     }   }    /**    * 復(fù)制    *    * @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;   }    /**    * 捕捉屏幕的一個(gè)矯形區(qū)域    *    * @param r    * @param x    *      x坐標(biāo)位置    * @param y    *      y坐標(biāo)位置    * @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;   }  } 

在示例之前,注意屏幕坐標(biāo)位置如何確定,我是下載了一個(gè)小工具,用起來(lái)十分方便,建議大家使用

1. 簡(jiǎn)單的模擬測(cè)試

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);      // 設(shè)置開始菜單的大概位置     int x = 40;     int y = Toolkit.getDefaultToolkit().getScreenSize().height - 10; // 鼠標(biāo)移動(dòng)到開始菜單,     rb.mouseMove(x, y);     rb.delay(500);      // 單擊開始菜單     Common.clickLMouse(rb, x, y, 500);          rb.delay(1000);      // 運(yùn)行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);      // 運(yùn)行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);      // 運(yùn)行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);      // 運(yùn)行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);      // 右鍵測(cè)試     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. 點(diǎn)擊網(wǎng)易廣告賺取微薄利潤(rùn)

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);        // 輸入向下箭頭,實(shí)現(xiàn)翻頁(yè)       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);        // 輸入向下箭頭,實(shí)現(xiàn)翻頁(yè)       for (int i = 0; i < 500; i++)         Common.pressKeys(robot, ks, 0);        // 輸入向下箭頭,實(shí)現(xiàn)翻頁(yè)       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("成功點(diǎn)擊第" + count + "個(gè)廣告!");     }    }    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();    } } 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JAVA教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 织金县| 新津县| 沙田区| 泾阳县| 安溪县| 蓬溪县| 合阳县| 方山县| 通辽市| 化德县| 茌平县| 东港市| 新津县| 虹口区| 邢台市| 西平县| 沁水县| 山东省| 巩义市| 西林县| 遂平县| 黔南| 奎屯市| 昭苏县| 越西县| 马鞍山市| 吉水县| 富锦市| 涟源市| 洱源县| 石屏县| 石狮市| 封开县| 靖宇县| 昌都县| 蕲春县| 平安县| 泉州市| 巴塘县| 砀山县| 桑植县|