如何使用java捕获某些应用程序的屏幕?

Posted

技术标签:

【中文标题】如何使用java捕获某些应用程序的屏幕?【英文标题】:How can I use java to capture the screen of some applications? 【发布时间】:2021-01-30 21:02:51 【问题描述】:

我发现java awt可以截取全屏,但是如何截取特定应用程序的屏幕呢?比如我打开了一个matlab应用和eclipse应用。而且我无法告诉程序应用程序屏幕的大小,只知道 matlab 现在是一个活动窗口。我只想捕获 Matlab 的屏幕。我该怎么做?

import java.awt.AWTException; 
import java.awt.Rectangle; 
import java.awt.Toolkit; 
import java.awt.Robot; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 
import java.io.File; 
import javax.imageio.ImageIO; 
  
public class Screenshot  
    public static final long serialVersionUID = 1L; 
    public static void main(String[] args) 
     
        try  
            Thread.sleep(120); 
            Robot r = new Robot(); 
  
            // It saves screenshot to desired path 
            String path = "D:// Shot.jpg"; 
  
            // Used to get ScreenSize and capture image 
            Rectangle capture =  
            new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); 
            BufferedImage Image = r.createScreenCapture(capture); 
            ImageIO.write(Image, "jpg", new File(path)); 
            System.out.println("Screenshot saved"); 
         
        catch (AWTException | IOException | InterruptedException ex)  
            System.out.println(ex); 
         
     
 

【问题讨论】:

【参考方案1】:

要截取屏幕的一部分,我们需要指定一个要截取的矩形区域。以下语句创建一个截取区域,即屏幕的前四分之一。

try 
            Robot robot = new Robot();
            String format = "jpg";
            String fileName = "PartialScreenshot." + format;
             
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            Rectangle captureRect = new Rectangle(0, 0, screenSize.width / 2, screenSize.height / 2);
            BufferedImage screenFullImage = robot.createScreenCapture(captureRect);
            ImageIO.write(screenFullImage, format, new File(fileName));
             
            System.out.println("A partial screenshot saved!");
         catch (AWTException | IOException ex) 
            System.err.println(ex);
        

【讨论】:

如果我无法指定应用程序的区域,但我必须捕获该应用程序的屏幕。就像它是一个活动窗口一样,我该怎么做?

以上是关于如何使用java捕获某些应用程序的屏幕?的主要内容,如果未能解决你的问题,请参考以下文章

Java 屏幕捕获应用程序 - 如何?

如何在不调整窗口大小的情况下使用 Java 在 Selenium Webdriver 中捕获屏幕截图 [重复]

C# 捕获直接 3D 屏幕

如何在实现屏幕录制时隐藏按钮或 textView

如何使用MindMapper屏幕捕获功能

如何使用node.js捕获正在运行的计算机主机的桌面屏幕