請問JAVA中的Robot物件是否可指定視窗作用?

例如:

Robot robot = new Robot();

robot = new Robot();

// 滑鼠移動到座標

robot.mouseMove(974, 11);

robot.setAutoDelay(3000);

// 點擊左鍵(按下)

robot.mousePress(KeyEvent.BUTTON1_MASK);

robot.setAutoDelay(1000);

類似這些動作,我想要切換到子視窗作用

是否有方法可以切換?

請大大幫忙~~找資料找了3天了一籌莫展中T.T

Update:

抱歉~因為我是要用來監控一個作業程式

它會切至全螢幕

也就是說我用切換視窗alt+tab鍵執行視窗切換

之後Robot的動作就要等它切換回來才可以動作

是否有方法突破?

1 Answer

Rating
  • Samuel
    Lv 5
    1 decade ago
    Favorite Answer

    1. java.awt.Robot 提供視窗系統層面的滑鼠按鍵功能, 所以等於是使用者在操作滑鼠鍵盤, 程式如果沒被安控擋下, 那可以做任何事, 包括在您的檔案總管中刪除檔案, 或者是無限回圈造成系統類似當機, 所以必須謹慎.

    2. 因此您的答案是: 當然可以! 在任何視窗都可以, 包括VB, C ... 所有執行中正在接受滑鼠鍵盤輸入的畫面都可.

    3. 以下一個簡單程式, 您耐心讓他執行幾秒鐘, 然後去看程式, 就有概念了, 我算的很準, 不會動到您視窗其他東西 :

    import java.awt.*;

    import java.awt.event.*;

    import javax.swing.*;

    public class autotest {

    public static void main(String args[]) {

    JFrame f1 = new JFrame("Screen ONE");

    JFrame f2 = new JFrame("Screen TWO");

    f1.setDefaultCloseOperation(f1.EXIT_ON_CLOSE);

    f2.setDefaultCloseOperation(f2.EXIT_ON_CLOSE);

    f1.setBounds(100, 100, 300, 100);

    f2.setBounds(400, 100, 300, 100);

    JToggleButton tb1 = new JToggleButton("Button 1");

    JToggleButton tb2 = new JToggleButton("Button 2");

    Container c1 = f1.getContentPane();

    c1.setLayout(new FlowLayout());

    c1.add(tb1);

    c1.add(tb2);

    Container c2 = f2.getContentPane();

    c2.setLayout(new FlowLayout());

    JTextField tx1 = new JTextField(25);

    c2.add(tx1);

    f1.setVisible(true);

    f2.setVisible(true);

    try {

    Point p1 = tb1.getLocationOnScreen();

    Point p2 = tx1.getLocationOnScreen();

    Robot robot = new Robot();

    //移到並按下 Button 1

    robot.mouseMove(p1.x + 10, p1.y + 5);

    robot.setAutoDelay(3000);

    robot.mousePress(KeyEvent.BUTTON1_MASK);

    robot.mouseRelease(KeyEvent.BUTTON1_MASK);

    robot.setAutoDelay(2000);

    //移到第二個視窗並輸入Good

    robot.mouseMove(p2.x + 10, p2.y + 5);

    robot.setAutoDelay(300);

    robot.mousePress(KeyEvent.BUTTON1_MASK);

    robot.mouseRelease(KeyEvent.BUTTON1_MASK);

    robot.keyPress(KeyEvent.VK_SHIFT);

    robot.keyPress(KeyEvent.VK_G);

    robot.keyRelease(KeyEvent.VK_SHIFT);

    robot.keyPress(KeyEvent.VK_O);

    robot.keyPress(KeyEvent.VK_O);

    robot.keyPress(KeyEvent.VK_D);

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    }

    2009-08-29 05:08:19 補充:

    我測試過3種全螢幕: A. Java全螢幕,Robot在同一JVM; B. Java全螢幕,Robot在另一個JVM; C. PPS網路電視全螢幕,Robot的JVM自然是不同的程式.

    3種方式 Robot 都運作的很好啊! C中, Robot也可控制PPS. 您能再詳細說明困難在哪兒?

    • Login to reply the answers
Still have questions? Get your answers by asking now.