目的是只要java应用程序正在运行,无论屏幕锁定如何,都可以进行屏幕捕获。我在交流中遇到了几个类似的问题,但所有这些问题都与使用 Selenium 或某些 Windows 特定代码有关。
代码(见下文)使用
java.awt.Robot
进行循环屏幕捕获。文件保存为 png。
问题是 当用户锁定计算机时,截取的屏幕截图是锁定屏幕,而不是电脑解锁时底层屏幕的样子。
如何解决这个问题?
import java.awt.DisplayMode;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class Capture{
public static void main(String[] args) throws Exception {
GraphicsDevice screen = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
DisplayMode dm = screen.getDisplayMode();
int[] size = {dm.getWidth(), dm.getHeight()};
Rectangle rect = new Rectangle(size[0], size[1]);
String path = "D:/img.png";
Robot rob = new Robot(screen);
File outfile = new File(path);
while (true) {
BufferedImage img = rob.createScreenCapture(rect);
ImageIO.write(img, "png", outfile);
Thread.sleep(1000);
}
}
}
环境
Windows 10
JDK 12
我知道这是一个老问题,但我也遇到了同样的问题,因为在 Jenkins 节点上运行的测试框架在发生异常时无法捕获屏幕截图。这里接受的答案解决了问题:是否可以在计算机锁定时以编程方式截取屏幕截图?