[英]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.