我想截取一个java原生应用程序(任何框架AWT、Swing、JavaFx)的屏幕截图,但不想将其带到前台。是否有任何特定于框架的方法可用于此操作?
我已经尝试使用Robot类来获取屏幕截图
private static void capture(int x, int y , int width , int height, String setName) {
Robot robot = new Robot();
Rectangle area = new Rectangle(x, y, width, height);
BufferedImage image = robot.createScreenCapture(area);
ImageIO.write(image, "png", new File(System.getProperty("user.dir") + "\\images\\" + setName +".png"));
}
现在,robot类只需获取区域坐标并捕获图像,无论目标应用程序是否位于顶部,为了使应用程序位于顶部,我使用JNA将其聚焦
private static void bringToFocus() {
for (DesktopWindow desktopWindow : WindowUtils.getAllWindows(true)) {
if (desktopWindow.getTitle().contains("notepad")) {
HWND hwnd = User32.INSTANCE.FindWindow(null, desktopWindow.getTitle());
User32.INSTANCE.SetForegroundWindow(hwnd);
break;
}
}
}
但在这个示例中,我们只需要捕获一个应用程序,如果需要捕获10个应用程序屏幕截图,则需要逐一将它们放到前面,然后捕获并捕获下一个应用程序。
是否有任何框架特定的方法,可以采取应用程序的屏幕截图,而不把它带到前面。
1条答案
按热度按时间icnyk63a1#
如果您的屏幕截图只需要是Java GUI,则可以绘制到BufferedImage
如果您的需求是绘制Java GUI组件沿着屏幕的其余部分,但就像java(J)Frame在前面一样,您可以先使用robot绘制屏幕,然后执行我上面发布的操作,但BufferedImage(已经绘制)作为参数传入,而不是在方法中创建。