illusionist

          好好學習...天天向上

          鼠標模擬和鍵盤映射測試

          因為畢業(yè)設(shè)計需要,做了一點點鼠標和鍵盤模擬的測試,收獲了一點關(guān)于Robot知識,這是一個非常有趣的類,此類用于測試自動化,自運行演示程序和其他需要控制鼠標和鍵盤的應(yīng)用程序生成本機系統(tǒng)輸入事件。Robot類主要目的是便于java平臺實現(xiàn)自動測試。主要方法如下:動作都在java.awt.event包中的KeyEvent和MouseEvent中定義
          • void keyPress(int keycode)按下給定的鍵
          • void keyRelease(int keycode)釋放給定的鍵
          • void mouseMove(int x, int y)將鼠標指針移動到給定屏幕坐標
          • void mousePress(int buttons)按下一個或多個鼠標按鈕
          • void mouseRelease(int buttons)釋放一個或多個鼠標按鈕
          • void mouseWheel(int wheelAmt)在配有滾輪的鼠標旋轉(zhuǎn)滾輪
          • BufferedImage createScreenCapture(Rectangle screenRect)創(chuàng)建包含從屏幕中讀取的像素的圖像
          第一個例子是鼠標模擬測試,在多線程中每隔1s隨機移動鼠標,一共隨機6次鼠標閃爍,源碼如下:
          /*
           * MouseSimulate.java
           * 
           * Created on 2007-5-7, 4:03:04
           * 
           * To change this template, choose Tools | Template Manager
           * and open the template in the editor.
           
          */

          package cn.edu.yutao;

          import java.awt.AWTException;
          import java.awt.Dimension;
          import java.awt.Robot;
          import java.awt.Toolkit;
          import java.awt.event.InputEvent;
          import java.util.Random;

          /**
           *
           * 
          @author Aslan
           
          */
          public class MouseSimulate implements Runnable{
              
              
          private volatile boolean isRunning = false;
              
              
          private Robot robot;
              
          private Dimension dim;
              
          private Random random;

              
          public MouseSimulate() {
                  random 
          = new Random();
                  dim 
          = Toolkit.getDefaultToolkit().getScreenSize();
                  
                  
          try{
                      robot 
          = new Robot();
                  }
          catch(AWTException e){
                      e.printStackTrace();
                  }
              }

              
          public void run() {
                  
          while(isRunning){
                      
          int x = random.nextInt((int)dim.getWidth());
                      
          int y = random.nextInt((int)dim.getHeight());
                      System.out.println(
          "the mouse located in (" + x + "," + y + ")");
                      
                      robot.mouseMove(x, y);
                      robot.mousePress(InputEvent.BUTTON1_MASK);
                      
                      
          try{
                          Thread.sleep(
          1000);
                      }
          catch(InterruptedException e){
                          e.printStackTrace();
                      }
                  }
              }
              
              
          public synchronized void start(){
                  isRunning 
          = true;
              }
              
              
          public synchronized void stop(){
                  isRunning 
          = false;
              }
              
              
          public static void main(String[] args){
                  MouseSimulate test 
          = new MouseSimulate();
                  
                  test.start();
                  System.out.println(
          "-----------time start-------------");
                  Thread thread 
          = new Thread(test);
                  thread.start();
                  
                  
          try{
                      Thread.sleep(
          10000);
                  }
          catch(InterruptedException e){
                      e.printStackTrace();
                  }
                  
                  test.stop();
                  System.out.println(
          "-----------time stop--------------");
              }

          }

          Robot類的方法createScreenCapture可以簡單的用于抓取屏幕圖片,可以在java應(yīng)用程序中直接調(diào)用該方法抓取屏幕,檢測遠程電腦屏幕狀態(tài),這里參考了java社區(qū)的例子,默認構(gòu)造函數(shù)生成后綴為png的文件,可以在第二個構(gòu)造函數(shù)傳入其他名稱,支持gif和jpg。截圖程序源碼如下:
          /*
           * GuiCamera.java
           * 
           * Created on 2007-5-7, 4:18:46
           * 
           * To change this template, choose Tools | Template Manager
           * and open the template in the editor.
           
          */

          package cn.edu.yutao;

          import java.awt.Dimension;
          import java.awt.Rectangle;
          import java.awt.Robot;
          import java.awt.Toolkit;
          import java.awt.image.BufferedImage;
          import java.io.File;
          import javax.imageio.ImageIO;

          /**
           *
           * 
          @author Aslan
           
          */
          public class GuiCamera {
              
              
          private String fileName;
              
          private final String defaultFileName = "camera";
              
              
          private String format;
              
          private final String defaultFormat = "png";
              Dimension dim 
          = Toolkit.getDefaultToolkit().getScreenSize();
              

              
          public GuiCamera() {
                  
          this.fileName = defaultFileName;
                  
          this.format = defaultFormat;
              }

              
          public GuiCamera(String fileName, String format) {
                  
          this.fileName = fileName;
                  
          this.format = format;
              }
              
              
          public void capture() throws Exception{
                  BufferedImage imageScreen 
          = (new Robot()).createScreenCapture(new Rectangle((int)dim.getWidth(), (int)dim.getHeight()));
                  String imageName 
          = this.fileName + "." + this.format;
                  File file 
          = new File(imageName);
                  System.out.println(
          "Save file " + imageName);
                  ImageIO.write(imageScreen, format, file);
                  System.out.println(
          "Finished!!");
              }
              
              
          public static void main(String[] args){
                  GuiCamera camera 
          = new GuiCamera("hello""jpg");
                  
          try{
                      camera.capture();
                  }
          catch(Exception e){
                      e.printStackTrace();
                  }
              }
              
              

          }
          以上程序都在mac os 10.4.8下測試,截圖為  很漂亮~ 出現(xiàn)警告是因為某些api在jdk6中已經(jīng)標記為廢棄。

          posted on 2007-05-09 21:44 伽藍 閱讀(2127) 評論(5)  編輯  收藏 所屬分類: Java SE

          Feedback

          # re: 鼠標模擬和鍵盤映射測試 2007-05-10 04:02 黑蝙蝠

          恩 頂一下 不錯這樣看來可以用Robot類做一個類似按鍵精靈的軟件
          學習...  回復(fù)  更多評論   

          # re: 鼠標模擬和鍵盤映射測試 2007-05-10 08:03 BeanSoft

          還可以做遠程控制, 跨平臺的... 我做過, 但是功能比較弱... 主要是不支持組合鍵. http://gro.clinux.org/frs/?group_id=740&release_id=887  回復(fù)  更多評論   

          # re: 鼠標模擬和鍵盤映射測試 2007-05-10 08:59 Swing

          @BeanSoft
          遠程控制怎么做的 一個什么思路?  回復(fù)  更多評論   

          # re: 鼠標模擬和鍵盤映射測試 2007-05-10 09:27 BeanSoft

          就是個C/S模式的服務(wù)器, 客戶端再服務(wù)器發(fā)回的截屏上點擊按鍵和鼠標, 然后把事件發(fā)會給服務(wù)器端, 服務(wù)器端呢再用 Robot 模擬按鍵和鼠標.
          詳細使用說明:
          http://gro.clinux.org/forum/forum.php?forum_id=2597  回復(fù)  更多評論   

          # re: 鼠標模擬和鍵盤映射測試 2007-05-10 16:25 伽藍

          可以在服務(wù)端寫一個servlet,將response返回流設(shè)置為image,這樣可以在客戶端查看服務(wù)器屏幕狀態(tài)  回復(fù)  更多評論   



          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 杭锦后旗| 阿勒泰市| 靖州| 吴堡县| 宁晋县| 西贡区| 陇川县| 磐石市| 洪雅县| 崇信县| 宁强县| 台湾省| 连山| 久治县| 新巴尔虎左旗| 修文县| 湟中县| 嘉黎县| 内江市| 惠州市| 竹溪县| 广宁县| 农安县| 南涧| 化州市| 大宁县| 炉霍县| 沈阳市| 云阳县| 伊春市| 镇康县| 云霄县| 长武县| 禹城市| 收藏| 建阳市| 绥阳县| 敦煌市| 武安市| 霍山县| 梁山县|