使用机器人单击并键入Microsoft Word不起作用

时间:2014-06-14 15:42:57

标签: java ui-automation awtrobot

我创建了以下代码来执行以下操作:

  1. 创建一个新的Word文件并将其打开
  2. 检查任务管理器是否已打开,然后继续
  3. 使用Robot类移动到屏幕中心,然后单击Word应用程序并键入: Y
  4. 除了输入 Y 之外,它正在做所有事情。

    代码:

    // Open Word Document
    public boolean openWordDoc(String tempProName, String URL, String j) throws IOException, AWTException {
    
        boolean result = false;
    
        String userHomeFolder = System.getProperty("user.home");
        File textFile = new File((userHomeFolder + "/Desktop"), j + " " + URL);
        BufferedWriter out = new BufferedWriter(new FileWriter(textFile));
        out.close();
        if (Desktop.isDesktopSupported()) {
            Desktop fD = Desktop.getDesktop();
            fD.open(textFile);
        }
    
        // See if it really did open and wait until it opened to continue
        String line = "";
        Process p = Runtime.getRuntime().exec("tasklist.exe");
        BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
        while ((!line.equals("WINWORD.EXE"))) {
            while ((line = input.readLine()) != null) {
                String[] templine = line.split(" ");
                if (templine[0].equals("WINWORD.EXE")) {
                    line = "WINWORD.EXE"; 
                    result = true;
                    break;
                }
            }
        }
    
        // Robot
        Robot robot = new Robot();
    
        double x = 0;
        double y = 0;
    
        x = Toolkit.getDefaultToolkit().getScreenSize().getWidth() / 2;
        y = Toolkit.getDefaultToolkit().getScreenSize().getHeight() / 2;
    
        int xx = (int) Math.round(x);
        int yy = (int) Math.round(y);
    
        robot.mouseMove(xx, yy);
    
        robot.mousePress(InputEvent.BUTTON1_MASK);
    
        robot.keyPress(KeyEvent.VK_Y);
    
        return result;
    }
    

1 个答案:

答案 0 :(得分:2)

由于弹出窗口始终在屏幕中间打开,因此可以安全地说:

Dimension middle = new Dimension(Toolkit.getDefaultToolkit().getScreenSize().getWidth() / 2, Toolkit.getDefaultToolkit().getScreenSize().getHeight() / 2);

返回屏幕的精确中间部分。现在你必须将光标相对于中间移动到按钮所在的位置。要做到这一点你可以反复尝试,但你也可以设置一个while循环来告诉你按钮的位置。像这样:

while(true){
    System.out.println(MouseInfo.getPointerInfo().getLocation());
}

现在您知道按钮在屏幕上的位置,但现在您应该相对于中间位置,这样任何尺寸的屏幕都可以使用。因此,您必须考虑x和y的差异。既然您知道按钮相对于中间的位置,您可以说:

Robot robot = new Robot();
robot.mouseMove(middle.getWidth() + differenceX, middle.getHeight() + differenceY);
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);

请注意,这种方式并不完全安全。如果用户在单击之前设法移动弹出窗口,则代码将在其他位置单击。

但对于其他人,我相信这段代码可以在所有显示器上运行。但我还没有测试过它。并且您可能需要让机器人单击两次以获得焦点,另一次需要实际点击。如果您还有其他问题,请不要犹豫。

我希望这有效。

按键代码:

// Robot
    Robot robot = new Robot();

    double x = 0;
    double y = 0;

    x = Toolkit.getDefaultToolkit().getScreenSize().getWidth() / 2;
    y = Toolkit.getDefaultToolkit().getScreenSize().getHeight() / 2;

    int xx = (int) Math.round(x);
    int yy = (int) Math.round(y);

    robot.mouseMove(xx, yy);
    robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
    robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
    robot.keyPress(KeyEvent.VK_Y);

你应该能够看到它的去向 我希望这有效:)。