Screenshots von mehreren Monitoren?!

Loki2

Erfahrenes Mitglied
Hallo,

ich habe in meinem Programm eine Screenshotfunktion die auch bestens funktioniert.
Jetzt bin ich aber vor dem kniffligen Problem das diese Funktion immer nur von dem primären Monitor einen Screenshot macht. Wenn man zwei Monitore angeschlossen hat, wird der sekundäre nicht berücksichtigt.
Gibt es eine Möglichkeit wie ich von beiden Bildschirmen einen Screenshot machen kann? Es könnte auch so sein das wenn man auf den Screenshot-Button klickt eine Abfrage kommt von welchem Monitor der Screenshot gemacht werden soll oder ob von beiden.

Hat da jemand einen Rat wie ich das Problem lösen könnte? Ich bin da derzeit noch sehr ratlos...? :confused:

Vielen Dank!

Gruß und so
Loki2
 
Hallo!

hab leider nur einen Monitor hier, aber versuchs mal damit:
Java:
/**
 * 
 */
package de.tutorials;

import java.awt.AWTException;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.Robot;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

/**
 * @author Tom
 * 
 */
public class MultipleDisplayAwareScreenShotHelper {

    /**
     * @param args
     */
    /**
     * @param args
     */
    public static void main(String[] args) {
        GraphicsDevice[] graphicsDevices = GraphicsEnvironment
                .getLocalGraphicsEnvironment().getScreenDevices();

        for (int i = 0; i < graphicsDevices.length; i++) {
            GraphicsDevice device = graphicsDevices[i];
            try {
                Robot robot = new Robot(device);
                ImageIO.write(robot.createScreenCapture(new Rectangle(device
                        .getDisplayMode().getWidth(), device.getDisplayMode()
                        .getHeight())), "jpeg", new File("c:/display_" + i
                        + ".jpg"));
            } catch (AWTException e) {
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }
}

Gruss Tom
 
Hallo,

vielen Dank für die Antwort. Das hat mir weitergeholfen. Ich habe es noch etwas geändert um alle Bildschirme in eine Datei zu bekommen.

Hier meine Lösung:

Code:
        GraphicsDevice[] graphicsDevices = GraphicsEnvironment
            .getLocalGraphicsEnvironment().getScreenDevices();
        int width = 0;
        int height = graphicsDevices[0].getDisplayMode().getHeight();
        for (int i = 0; i < graphicsDevices.length; i++) {
            GraphicsDevice device = graphicsDevices[i];
            width = width + device.getDisplayMode().getWidth();
        }

        Rectangle screenRect = new Rectangle(width, height);
Ich setze hierbei voraus das die vertikale Auflösung bei allen angeschlossenen Monitoren gleich ist.

Bei zumindest zwei gleichzeitig angeschlossenen Monitoren funktioniert das wunderbar :-)


Gruß und so
Loki2
 
Zurück