2017-03-31 81 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在其評論中建議的內容。