机器人 - 使用RGB值将鼠标移动到位置

时间:2017-03-31 17:15:24

标签: java awtrobot

我目前正在使用Java Robot类将鼠标移动到坐标:

Robot bot = new Robot();

bot.mouseMove(x, y);

问题是我需要将鼠标移动到一个坐标以便点击弹出窗口中的特定按钮,并且每次出现时窗口都可以从一个位置移动到另一个位置(它不总是在同一位置) 。 (在我的具体情况下,我将Ctrl + P发送到记事本,然后点击弹出窗口中的"打印"按钮。

我正在考虑通过以下方式检索要点击的按钮的RGB值:

Color color = bot.getPixelColor( MouseInfo.getPointerInfo().getLocation().x 
                    , MouseInfo.getPointerInfo().getLocation().y);


System.out.println(color.getRGB());

然后以某种方式将鼠标移动到具有给定RGB值的位置,但我不确定如何实现它。

或者有没有我想到的替代解决方案?

谢谢!

更新

我意识到使用RGB值移动鼠标可能不是最好的解决方案,因为如果有多个坐标具有相同的RGB值,它可能会检测到错误的点..有没有办法绕过这个?

1 个答案:

答案 0 :(得分:0)

我认为唯一的解决方案是寻找所需颜色的屏幕扫描,然后你必须决定鼠标指针必须移动的位置。

但逐像素扫描需要花费大量时间,因此您可能需要跳过一些像素。这是我出来的解决方案:

//Look for some color on Screen, skiping or not a value of pixels
    public static void scanScreen(Color matchColor, int skipPixel){

        try {
            Robot r = new Robot();

            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            double width = screenSize.getWidth();
            double height = screenSize.getHeight();

            //Scan the screen pixel by pixel
            for(int pixelX = 0; pixelX<= width;pixelX = pixelX + skipPixel){
                for(int pixelY = 0; pixelY<=height;pixelY = pixelY + skipPixel){


                    Color currentColor = r.getPixelColor(pixelX, pixelY);
                    System.out.println(pixelX+","+pixelY+": " + currentColor.getRGB());
                    if(matchColor.getRGB()==currentColor.getRGB()){
                        //TODO Do whatever you want with the location found

                        System.out.println("Found color: " + matchColor.getRGB() + " at "+ pixelX + ","+pixelY);
                    }


                }
            }
        } catch (AWTException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }


public static void main(String[] args) {
            Color c = new Color(-1972490);
            scanScreen(c, 100);
    }

希望它有所帮助。祝好运!

EDIT1:你可以使用这个解决方案以及Jorge Campos在评论中提出的建议。