很多時候,我們希望能夠實作自動測試,自動示範功能,或者是其它的一些滑鼠和鍵盤控制的應用(比如幫人點選廣告賺利潤等)。出于這樣的目的,自從JDK1.3開始,它就為我們提供了一個用來産生本機輸入事件的機器人類 — java.awt.Robot.
下面我來詳細介紹Robot的功能及應用示例:
一.robot的主要功能
-
BufferedImage createScreenCapture(Rectangle screenRect)
說明:該方法提供類似于鍵盤上的PrintScreen鍵的功能,将指定矩形區域内的螢幕像素copy下來産生一個BufferedImage。 說明:該方法提供類似于鍵盤上的PrintScreen鍵的功能,将指定矩形區域内的螢幕像素copy下來産生一個BufferedImage。
應用:我們可以将這個方法用在圖形程式中,或是用它來實作遠端螢幕傳輸,可做成遠端電腦監控程式等.應用:我們可以将這個方法用在圖形程式中,或是用它來實作遠端螢幕傳輸,可做成遠端電腦監控程式等.
-
void delay(int ms)
說明:用來将目前的程式(thread)休眠(sleep)若幹毫秒(ms)。
應用:可用來控制程式的延時。這個一般是必須的,因為你在兩次間隔操作中肯定有延時。
-
Color getPixelColor(int x, int y)
說明:取得給定螢幕坐标像素位置的顔色值。
應用:就是取顔色RGB值,就不多說了。
-
void keyPress(int keycode) void keyRelease(int keycode) 說明:這兩個方法的作用一看便知,用來産生指定鍵的按鍵按下與擡起動作,相當于Win32 API的keyb_event函數,即模拟鍵盤操作咯,具體keycode值就是KeyEvent.VK_C、KeyEvent.VK_D、KeyEvent.VK_CONTROL什麼的,具體應用時直接看Eclipse提示就知道了。
應用:可用于程式的自動示範、測試等,非常有用。 應用:可用于程式的自動示範、測試等,非常有用。
-
void mouseMove(int x, int y)
說明:将滑鼠光标移動到指定的螢幕坐标。
應用:可用于程式的自動示範、測試等,配合其他的方法使用,是不可缺少的。
-
void mousePress(int buttons)
void mouseRelease(int buttons)
void mouseWheel(int wheelAmt)
說明:上面的三種方法,産生指定滑鼠按鈕的按下,擡起,及滾輪動作,就是模拟滑鼠操作咯,具體buttons的值有InputEvent.BUTTON1_MASK(滑鼠左鍵)、InputEvent.BUTTON3_MASK(滑鼠右鍵,如果是雙鍵滑鼠,請改用InputEvent.BUTTON2_MASK)等。
void mouseRelease(int buttons)
void mouseWheel(int wheelAmt)
說明:上面的三種方法,産生指定滑鼠按鈕的按下,擡起,及滾輪動作,就是模拟滑鼠操作咯,具體buttons的值有InputEvent.BUTTON1_MASK(滑鼠左鍵)、InputEvent.BUTTON3_MASK(滑鼠右鍵,如果是雙鍵滑鼠,請改用InputEvent.BUTTON2_MASK)等。
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();
// 設定開始菜單的大概位置
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);
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);
ks = new int[] {KeyEvent.VK_D, KeyEvent.VK_I, KeyEvent.VK_R,KeyEvent.VK_ENTER};
Common.pressKeys(rb, ks, 500);
rb.delay(1000);
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_S, KeyEvent.VK_H, KeyEvent.VK_U,
KeyEvent.VK_T,KeyEvent.VK_D,KeyEvent.VK_O,KeyEvent.VK_W,KeyEvent.VK_N,KeyEvent.VK_SPACE,
KeyEvent.VK_MINUS,
KeyEvent.VK_S,KeyEvent.VK_SPACE,KeyEvent.VK_MINUS,KeyEvent.VK_T,KeyEvent.VK_SPACE,KeyEvent.VK_3,KeyEvent.VK_0
,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, "恭喜你中病毒了!");
}
}