最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2018年01月29日 15:27:53   作者:ytlcainiao  
這篇文章主要為大家詳細(xì)介紹了Java Robot應(yīng)用示例之機(jī)器人功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

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

一、Robot主要的功能

1. BufferedImage createScreenCapture(Rectangle screenRect) 

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

2. void delay(int ms)

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

3. Color getPixelColor(int x, int y)

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

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

說明:這兩個(gè)方法的作用一看便知,用來產(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)

說明:將鼠標(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)

說明:上面的三種方法,產(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è)小工具,用起來十分方便,建議大家使用

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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 10種簡(jiǎn)單的Java性能優(yōu)化

    10種簡(jiǎn)單的Java性能優(yōu)化

    你是否正打算優(yōu)化hashCode()方法?是否想要繞開正則表達(dá)式?Lukas Eder介紹了很多簡(jiǎn)單方便的性能優(yōu)化小貼士以及擴(kuò)展程序性能的技巧
    2017-11-11
  • Socket編程簡(jiǎn)單示例(聊天服務(wù)器)

    Socket編程簡(jiǎn)單示例(聊天服務(wù)器)

    socket編程是在不同的進(jìn)程間進(jìn)行網(wǎng)絡(luò)通訊的一種協(xié)議,下面這篇文章主要給大家介紹了關(guān)于Socket編程簡(jiǎn)單示例的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Java基于線程實(shí)現(xiàn)帶有滾動(dòng)效果的Label標(biāo)簽實(shí)例

    Java基于線程實(shí)現(xiàn)帶有滾動(dòng)效果的Label標(biāo)簽實(shí)例

    這篇文章主要介紹了Java基于線程實(shí)現(xiàn)帶有滾動(dòng)效果的Label標(biāo)簽,實(shí)例分析了java線程的使用技巧及l(fā)abel標(biāo)簽的實(shí)現(xiàn)方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • SpringMVC Cron定時(shí)器Demo常見問題解決方案

    SpringMVC Cron定時(shí)器Demo常見問題解決方案

    這篇文章主要介紹了SpringMVC Cron定時(shí)器Demo常見問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(44)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(44)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • Windows系統(tǒng)下Eclipse搭建ESP32編譯環(huán)境及安裝過程

    Windows系統(tǒng)下Eclipse搭建ESP32編譯環(huán)境及安裝過程

    Ecppse 使用了 ESP-IDF 中的 Makefile 支持。這意味著您需要從創(chuàng)建 ESP-IDF 項(xiàng)目開始。您可以使用 github 中的 idf-template 項(xiàng)目,接下來通過本文給大家介紹Windows系統(tǒng)下Eclipse搭建ESP32編譯環(huán)境及安裝過程,感興趣的朋友一起看看吧
    2021-10-10
  • Java 中synchronize函數(shù)的實(shí)例詳解

    Java 中synchronize函數(shù)的實(shí)例詳解

    這篇文章主要介紹了Java 中synchronize函數(shù)的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家理解使用synchronize函數(shù)的使用方法,需要的朋友可以參考下
    2017-09-09
  • 新手初學(xué)Java繼承、封裝與多態(tài)

    新手初學(xué)Java繼承、封裝與多態(tài)

    封裝、繼承、多態(tài)三大特征是java中比較常用的,務(wù)必要掌握,下面給大家介紹Java封裝、繼承、多態(tài)三大特征的理解,有不清楚的朋友可以一起學(xué)習(xí)下
    2021-07-07
  • spring中bean的生命周期詳解

    spring中bean的生命周期詳解

    今天小編就為大家分享一篇關(guān)于spring中bean的生命周期詳解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 基于Java實(shí)現(xiàn)無(wú)向環(huán)和有向環(huán)的檢測(cè)

    基于Java實(shí)現(xiàn)無(wú)向環(huán)和有向環(huán)的檢測(cè)

    這篇文章主要介紹了如何在?Java?中實(shí)現(xiàn)無(wú)向環(huán)和有向環(huán)的檢測(cè),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下
    2022-04-04

最新評(píng)論

泾阳县| 西吉县| 昌图县| 乌拉特后旗| 安多县| 彭州市| 若尔盖县| 大连市| 永城市| 土默特左旗| 怀化市| 峨边| 浦江县| 苗栗市| 乐平市| 巴塘县| 托克逊县| 渝中区| 墨玉县| 舟曲县| 桐城市| 简阳市| 重庆市| 鄢陵县| 建德市| 巴林右旗| 长宁区| 延吉市| 安岳县| 土默特右旗| 光泽县| 南陵县| 阿勒泰市| 清远市| 许昌市| 满洲里市| 鄱阳县| 得荣县| 南和县| 新津县| 同德县|