ZhangLiHai.Com Blog


用java实现抓计算机屏幕

张利海 于 2005年05月10日 17:39 发表
关键词 : java 抓屏 图片

我们看到googlealexa 等网站,在查询结果的时候还会给你生成一个该网站的略缩图,尤其是google的桌面搜索,如果你安装google的桌面搜索你就非常明白了。

我们想象肯定有一个后台程序在监视当前机器的屏幕,所以要截取图片的同时先要学会用程序抓当前屏幕.

用java实现代码如下:

    public void screen() {
        try {
            Toolkit tk = Toolkit.getDefaultToolkit();
            tk.sync();
            Rectangle ecran = new Rectangle(tk.getScreenSize());
            Robot robot = new Robot();
            robot.setAutoDelay(0);
            robot.setAutoWaitForIdle(false);
            BufferedImage image = robot.createScreenCapture(ecran);
            // You get a BufferedImage in TYPE_INT_BGR.
            File file = new File("D:/screen.jpg");
            javax.imageio.ImageIO.write(image, "JPEG", file);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


注意是该程序运行时候最前端的屏幕.


可以捕获屏幕了,下面如何出现网站的页面呢?

我们假设后台程序可以用浏览器打开某个地址的页面。

我们用java做如下实现,假设当前系统是windows


    public boolean openIExplore(String url) {
        String cmd = "C:/Program Files/Internet Explorer/iexplore.exe  " + url;
        Process process = null;
        try {
             process = Runtime.getRuntime().exec(cmd);
            //考虑到网络因素,页面完全展开要一定的时间,所以再次停止一个时间
            Thread.currentThread().sleep(30000);
            return true;
        } catch (Exception e) {
            return false;
        }
    }



把以上两个方法结合起来,用命令行来执行,执行完后把命令行最小化。
或者我们做成远程调用的方式,系统可以把当前地址保存成图片.

这里有一个问题,就是频繁打开ie窗口而没有关闭窗口的动作。
因为我们不知道ie参数中有没有一个“窗口名字”的参数,如果存在窗口名字的概念,我们可以想
JavaScript中window.open(url,windowName,args,,,,);这样就可以只开一个浏览器了。

我们还可以假设做一个二帧的页面,该页面接收一个参数就是远程地址,该页面的顶帧高度为0,也就是不显示出来框架的架构。然后该帧里面有一段javascript来定时关闭窗口,而且是强制关闭窗口。

这样即不影响抓图效果,也不影响到服务器的进程。

这个只是一点点想法,真实的制作肯定要远远复杂。

我们这里只是来模拟这个操作的过程,不能在实际中应用。




 

新版本Blog中有更多内容
Copyright (C)2002-2005 All Rights Reserved Powered By:ZhangLiHai.Com