亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Windows 上使用 java 鎖屏期間的屏幕截圖

在 Windows 上使用 java 鎖屏期間的屏幕截圖

小怪獸愛吃肉 2023-12-21 10:39:47
目的是只要 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 10JDK 12
查看完整描述

1 回答

?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

在 Java 中,在鎖屏期間便攜式捕獲底層應用程序是不可能的,也許在任何屏幕捕獲解決方案中也是如此。文檔Robot.createScreenCapture

“[它]創建一個包含從屏幕讀取的像素的圖像。......”

這意味著它Robot只能捕獲正在呈現到屏幕上的任何內容,并且沒有概念/理解/編程能力來檢測其內容,例如單個應用程序、通知、小部件等。當呈現的內容是鎖屏時,那就是被捕獲。

這也意味著,當沒有向其發送任何內容時(假設監視器/屏幕被操作系統的能源策略關閉,因此不一定會被渲染),則不會捕獲任何內容(但可能是黑屏)。

為了實現您正在嘗試的目標,您需要應用程序特定的掛鉤(例如通過它公開的某些 API - 極不可能)或操作系統特定的調用或進程探測。前者取決于應用程序,后者則破壞可移植性。

關于一般不可能的備注:視頻會議/流媒體/屏幕錄制/遠程訪問應用程序通常會在用戶之間共享應用程序特定的屏幕。然而,應用程序(“記錄器”)對其他應用程序(“記錄器”)的與應用程序無關的感知和訪問必然由操作系統來調節,從而破壞了可移植性。更不用說它在鎖屏期間停止了。

對于音頻捕獲或任何其他數據流來說同樣如此。作為格言,那么:

跨應用程序數據捕獲要么由目標應用程序公開,要么由操作系統介導。


查看完整回答
反對 回復 2023-12-21
  • 1 回答
  • 0 關注
  • 306 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號