簡體   English   中英

如何在Java中捕獲鼠標光標?

[英]How to capture mouse cursor in Java?

好的,你們中的大多數人會認為這是重復的,因為它已經寫在了所有地方,並不是真的可行,唯一的選擇是使用awt機器人進行屏幕截圖。

但是...問題是鼠標光標甚至沒有出現在AWT機器人生成的圖片中...我嘗試了gnome-screeshots,在那里可以看到鼠標光標。 但是從Java屏幕截圖來看,什么也沒有。 整個圖片,而不是鼠標光標。 就像在拍照之前將其隱藏起來。 我搜索類似setIncludeMouseCursor的參數或類似的東西,但是沒有運氣。

我可以捕獲鼠標位置,這很好。 但是,如果我僅捕獲此區域,則再也沒有光標。

任何想法如何執行robot.createScreenCapture來捕獲鼠標光標?

您需要使用MouseInfo類,並使用其方法靜態getPointerInfo()獲取一個Pointer對象,該對象表示光標在屏幕上的位置。

定位后,您可以使用Robot將屏幕截圖作為BufferedImage並在其上繪制光標。 很簡單!

社會科學中心

package stack;

import java.awt.AWTException;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.MouseInfo;
import java.awt.PointerInfo;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

public class GetMousePointer {
    public static void main(String[] args) {
        final String USER_HOME = System.getProperty("user.home");

        GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
        int width = gd.getDisplayMode().getWidth();
        int height = gd.getDisplayMode().getHeight();

        BufferedImage blackSquare = new BufferedImage(50, 50, BufferedImage.TYPE_3BYTE_BGR);
        for(int i = 0; i < blackSquare.getHeight(); i++){
            for(int j = 0; j < blackSquare.getWidth(); j++){
                blackSquare.setRGB(j, i, 128);
            }
        }


        try {
            Robot robot = new Robot();
            BufferedImage screenshot = robot.createScreenCapture(new Rectangle(0,0,width,height));
            PointerInfo pointer = MouseInfo.getPointerInfo();
            int x = (int) pointer.getLocation().getX();
            int y = (int) pointer.getLocation().getY();

            screenshot.getGraphics().drawImage(blackSquare, x, y, null);
            ImageIO.write(screenshot, "PNG", new File(USER_HOME, "screenshot.PNG"));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}  

輸出量
在此處輸入圖片說明

藍色方塊的左上角是光標的位置。

您可以擴展Robot並覆蓋createScreenCapture以(在給定光標位置的情況下)在捕獲中繪制光標。

像這樣:

@Override
public BufferedImage createScreenCapture(){
    BufferedImage img = Super.createScreenCapture();
    return drawCursor(x,y,img); 
}

Obvioulsy drawCursor返回BufferedImage

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM