簡體   English   中英

如何獲取在JVM外部運行的任何Linux / Windows應用程序的屏幕截圖

[英]How to get screenshot of any Linux/Windows application running outside of the JVM

是否可以使用Java獲取Java外部應用程序的屏幕截圖,例如VLC / Windows Media Player,將其存儲為Image對象,然后將其顯示在JLabel或類似的東西中? 有人知道這是否可能,如果有的話,是否有人對如何做到這一點有一般的想法?

注意:我只需要了解如何獲取屏幕截圖並將其存儲為某種形式的Image對象。 之后,我可以使用,操縱,顯示它等。

以下是Windows的答案 (不確定alt + printScr是否適用於linux:P)

我猜是實現這一目標的一種方法

1.使用Robot類來觸發alt + printScreen命令 (這會將活動窗口捕獲到剪貼板)

2.閱讀剪貼板!

以下是執行該操作的兩段代碼。 我實際上沒有嘗試,但我拼湊的東西。

Code to Fire命令可以在剪貼板上獲取活動窗口

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.");
 }
}

在剪貼板上讀取圖像的代碼

// 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;
}

您可以根據需要管理控件! 如果這對您有用,請告訴我。 但這肯定是我的todo試一試!

您可以使用名為Robot類來獲取整個屏幕的屏幕截圖。 遺憾的是,您無法使用純Java解決方案獲取屬於其他應用程序的窗口的位置和大小。 要做到這一點,你需要其他工具(腳本,JNI,JNA)。 這些工具不是跨平台的。

暫無
暫無

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

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