使用Java Robots类在屏幕上查找内容

时间:2013-02-19 16:38:57

标签: java artificial-intelligence awtrobot

我想知道是否有可能找到这个类的文件或程序。我知道有一些方法可以使用鼠标坐标或简单地找到一个应用程序并运行它,但这不是我想要做的。

更明确的例子是:假设我的桌面上有谷歌浏览器,Firefox和Safari,我将它们全部洗牌。如何在不使用“运行应用程序”命令的情况下让我的鼠标找到我正在寻找的浏览器。

我希望澄清它!谢谢你的帮助=)

3 个答案:

答案 0 :(得分:1)

最简单的方法(我知道,使用Robot)是记录构成你想要找到的东西的像素并逐个像素地查找它(你可以将当前截图与存储的图像进行比较)在文件中)。要做到这一点:

截取您要查找的图标并将其保存到文件中(只保存图标)(不是.jpg,因为这不是无损的,可能只是.bmp)。

然后你可以做类似的事情:

Robot robot = new Robot();
BufferedImage current = robot.createScreenCapture(
  new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));

static void getScreenStart()
{
  BufferedImage icon = ImageIO.read(new File("chromeIcon.bmp"));
  for (int x = 0; x < current.getWidth (); x++)
  for (int y = 0; y < current.getHeight(); y++)
  {
     boolean matches = true;
     for (int x2 = 0; x2 < icon.getWidth () && matches; x2++)
     for (int y2 = 0; y2 < icon.getHeight() && matches; y2++)
        if (icon.getRGB(x2, y2) != current.getRGB(x+x2, y+y2))
           matches = false;
     if (matches)
     {
        X_START = x;
        Y_START = y;
        return;
     }
  }
}

但一般情况下尽量避免这样做。

答案 1 :(得分:0)

不,我不认为使用Robot类可以轻松实现。这是因为Java是一种跨平台语言,不能/不能将库集成到本机环境和窗口管理器中。

Java代码需要在任何带有JDK的平台上运行,将这些功能添加到每个JDK都是一项非常重要的任务。我会研究其他可以提供此功能的Java库,机器人不会提供你想要的东西。

对于Windows,我建议使用AutoHotkey,这是一种用于桌面自动化的脚本语言,功能非常强大。 Mac OSX还有一个端口IronAHK

对于Java库,取决于您希望实现的目标,您可以查看一些GUI自动化测试解决方案,例如TestComplete甚至Selenium。查看Java的测试自动化工具,你可以找到更多!

答案 2 :(得分:0)

我正在为网络抓取做类似的事情,我可以告诉你,下面帖子上的工具不会那么简单。我将Selenium用于其他目的,但它不适用于您在所有可见区域顶部都有画布的图像。要实现这一点,您应该使用机器人类,但之前您必须知道您期望的坐标。要使用某种GUI自动化测试工具,您必须具有可供选择的字段。我不认为您会在某些网页上轻松找到它。可能为了实现工作解决方案,您必须进行数字图像处理,这非常好而且并不困难。有很多Java库可以做到这一点。尝试使用OpenCV,我认为JavaCV是lib名称,它是一个强大的名称。