Robots in Multidisplay-Umgebung

Doedskvad

Mitglied
Hallo!

Is mein erstes Mal hier, also seid sanft :D

Mein Problem: Ich will ne Maussteuerung für ne Multidisplay-Umgebung machen. Details erspar ich euch, jedenfalls will ich halt mit Robots die Maus über mehrere Displays bewegen. Dazu hab ich mir mal ein kleines Programm geschrieben, dass das nur fix testet.

Das sieht so aus:
Java:
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Robot;
import java.awt.event.InputEvent;

public class Main {

	public static void main(String[] args){
		GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
		GraphicsDevice[] gs = ge.getScreenDevices();
		Robot[] ra= new Robot[gs.length];
		for(int i=0; i<ra.length;i++){
			System.out.println(gs[i].getIDstring());
			try{ra[i]=new Robot(gs[i]);}catch (Exception e) {e.printStackTrace();}
		}
		
		for(int i=0;i<ra.length;i++){
			try{
			ra[i].mouseMove(500, 500);
			ra[i].mousePress(InputEvent.BUTTON3_MASK);
			ra[i].mouseRelease(InputEvent.BUTTON3_MASK);
			Thread.sleep(1000);}
			catch (Exception e) {e.printStackTrace();}
		}

	}
}

Soll eigentlich nur die Maus mal auf jedem Display platzieren und gut is. Klappt beim Hauptdisplay auch super, aber auf dem zweiten Display kommt der Zeiger nie an. Er beweg sich auf dem Hauptdisplay so weit wie möglich zum zweiten Display hin, aber das Hauptdisplay verlässt er einfach nicht.

Woran liegt das? Hoffe, ihr könnt mir helfen.
 

TR

Aktives Mitglied
also bei mir hat er auf dem ersten Monitor (steht links) die Rechte Maustaste ausgelöst und nach der Sekunden das gleich auf dem 2. Monitor (halt rechts)!

Also funktioniert wie gewünscht denke ich!
Hast du eine andere Konfiguration der Monitore?
 

Doedskvad

Mitglied
Nein, meine Anordnung sieht ähnlich aus. Hauptmonitor links, danaben der zweite. Bei mir läuft allerdings ein Mac.

ABER mir ist eben was aufgefallen. Wenn ich auf dem ersten Display mal den Mauszeiger auf Koordinaten wie (2500,500) setze, ist der Mauszeiger auf dem zweiten Bildschirm. Das legt die Vermutung nahe, dass die zwei Displays zu einem großen zusammengefügt wurden, das das erste Display im Array ergibt. Das zweite Display im Array is dann anscheinend leer, da kann man Koordinaten setzen, wie man man lustig ist, da passiert nix.
 

TR

Aktives Mitglied
mach mal in der ersten for-schleife nach dem System.out ein
Java:
System.out.println(gs[i].getDefaultConfiguration().getBounds().getLocation());
rein.

Bei mir kommt dann (windows 7) folgendes Ergebnis!
Code:
\Display0
java.awt.Point[x=0,y=0]
\Display1
java.awt.Point[x=1280,y=0]
 

Doedskvad

Mitglied
Jo, Ergebnis:

Code:
\Display0
java.awt.Point[x=0,y=0]
\Display1
java.awt.Point[x=1680,y=0]

Seltsam, das.

Edit: Ich hab nen Workaround für diese recht seltsame Situation gefunden. So funktionierts auch, aber für Hilfe bei dieser Sache wäre ich trotzdem dankbar!

Java:
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Robot;
import java.awt.event.InputEvent;

public class Main {

	public static void main(String[] args){
		try{
			GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
			GraphicsDevice[] gs = ge.getScreenDevices();
			Robot robot= new Robot(gs[0]);
			for(int i=0; i<gs.length;i++){
				System.out.println(gs[i].getIDstring());
				System.out.println(gs[i].getDefaultConfiguration().getBounds().getLocation());
			}
			
			for(int i=0;i<gs.length;i++){
				robot.mouseMove(gs[i].getDefaultConfiguration().getBounds().x+500, gs[i].getDefaultConfiguration().getBounds().y+500);
				robot.mousePress(InputEvent.BUTTON3_MASK);
				robot.mouseRelease(InputEvent.BUTTON3_MASK);
				Thread.sleep(1000);}
		
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
N screenshot machen ohne Robots? AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben