如何获取在JVM外部运行的任何Linux/Windows应用程序的屏幕截图

Dil*_*fey 6 java screenshot external process

是否可以使用Java获取Java外部应用程序的屏幕截图,例如VLC/Windows Media Player,将其存储为Image对象,然后将其显示在JLabel或类似的东西中?有人知道这是否可能,如果有的话,是否有人对如何做到这一点有一般的想法?

注意:我只需要了解如何获取屏幕截图并将其存储为某种形式的Image对象.之后,我可以使用,操纵,显示它等.

Sha*_*nak 3

这是 Windows 的答案(不确定 alt+printScr 在 Linux 上是否有效:P)

我想实现这一目标的一种方法

1. 使用 Robot 类来触发 alt+printScreen 命令(这会将活动窗口捕获到剪贴板)

2.读取剪贴板!

这是执行此操作的两段代码。我实际上并没有尝试过,而是我拼凑起来的一些东西。

代码触发命令以获取剪贴板上的活动窗口

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;

public class ActiveWindowScreenShot
{
 /**
  * Main method
  * 
  * @param args (not used)
  */
 public static void main(String[] args)
 {
  Robot robot;

  try {
   robot = new Robot();
  } catch (AWTException e) {
   throw new IllegalArgumentException("No robot");
  }

  // Press Alt + PrintScreen
  // (Windows shortcut to take a screen shot of the active window)
  robot.keyPress(KeyEvent.VK_ALT);
  robot.keyPress(KeyEvent.VK_PRINTSCREEN);
  robot.keyRelease(KeyEvent.VK_PRINTSCREEN);
  robot.keyRelease(KeyEvent.VK_ALT);

  System.out.println("Image copied.");
 }
}
Run Code Online (Sandbox Code Playgroud)

读取剪贴板上图像的代码

// If an image is on the system clipboard, this method returns it;
// otherwise it returns null.
public static Image getClipboard() {
    Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);

    try {
        if (t != null && t.isDataFlavorSupported(DataFlavor.imageFlavor)) {
            Image text = (Image)t.getTransferData(DataFlavor.imageFlavor);
            return text;
        }
    } catch (UnsupportedFlavorException e) {
    } catch (IOException e) {
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

您可以根据需要管理控件!让我知道这是否适合您。但这肯定是我尝试一下的任务!