远程计算机的屏幕截图

时间:2011-03-21 04:45:16

标签: java

您好我正在做一个拍摄远程计算机快照的程序。

我已经做到了。

ScreenServer.java。

import java.net.*;
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.ImageIO;

public class ScreenServer {
    public static void main(String[] args) throws Exception {
        Robot robot = new Robot();
        BufferedImage screen;

        while (true) {
            ServerSocket server = new ServerSocket(6659);
            Socket client = server.accept();

            Rectangle size = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
            screen = robot.createScreenCapture(size);
            int[] rgbData = new int[(int) (size.getWidth()*size.getHeight())];
            screen.getRGB(0,0, (int) size.getWidth(), (int) size.getHeight(), rgbData, 0, (int) size.getWidth());

            OutputStream baseOut = client.getOutputStream();
            ObjectOutputStream out = new ObjectOutputStream(baseOut);

            ImageIO.write(screen, "png", new File("d:\\orig_screen.png"));
            out.writeObject(size);

            for (int x = 0; x < rgbData.length; x++) {
                out.writeInt(rgbData[x]);
            }

            out.flush();
            server.close();
            client.close();
            out.close();
            baseOut.close();
        }
    }
}

ScreenClient.java

import java.net.*;
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.ImageIO;

public class ScreenClient {

    public static void main(String[] args) throws Exception {
        Socket server = new Socket("172.22.6.50",6659);

        ObjectInputStream in = new ObjectInputStream(server.getInputStream());

        Rectangle size = (Rectangle) in.readObject();

        int[] rgbData = new int[(int)(size.getWidth() * size.getHeight())];

        for (int x = 0; x < rgbData.length;x++) {
            rgbData[x] = in.readInt();
        }

        in.close();
        server.close();

        BufferedImage screen = new BufferedImage((int) size.getWidth(), (int) size.getHeight(), BufferedImage.TYPE_INT_ARGB);

        screen.setRGB(0,0, (int) size.getWidth(), (int) size.getHeight(), rgbData, 0,(int)size.getWidth());

        ImageIO.write(screen, "png", new File("d:\\screen.png"));
    }
}

但它不能正常工作。服务器获取自己的快照。请提供解决方案。

2 个答案:

答案 0 :(得分:2)

您正在捕获服务器的屏幕截图。请参阅here寻求帮助。

答案 1 :(得分:1)

  

服务器获取自己的快照......

嗯,显然它不能拍摄其他随机电脑的屏幕快照。如果它可以 那将是一个大量的安全漏洞!!

如果要拍摄计算机屏幕的快照,则必须从在该计算机上执行的程序或通过某些远程桌面协议执行此操作。换句话说,必须设置/配置计算机以允许这种情况发生。


我认为你的问题是你只是误解了这两个程序意图的使用方式。您应该在要进行快照的计算机上运行ScreenServer应用程序,并在要查看快照的计算机上运行ScreenClient应用程序。

您还应该知道,如果您在计算机上运行ScreenServer应用,网络上的任何其他计算机都可以捕获其屏幕。这是非常不安全的。