2017-03-31 41 views
1

我目前使用Java Robot类移动鼠标坐标:机器人 - 移动鼠标采用RGB值到位置

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值鼠标可能不是最好的解决办法BEC如果有使用相同的RGB值超过一个坐标它可以检测出点错了..是有办法在这附近?

+2

我会去使用JNA获取窗口位置,然后用该位置计算哪个将是按钮的位置,或者至少有一个较小的空间来使用mouseMove来找到该像素。 –

回答

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); 
    } 

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

编辑1:您可以使用此解决方案以及Jorge Campos在其评论中建议的内容。