Java in ein bestimmtes fenster schreiben?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Die erst Frage, die ich mir hier stelle, ist: Muss die Ausgabe denn zwingend in diesem fremden Fenster erfolgen? Wäre es keine Option, dies im Java-Programm zu erledigen?

Sofern dies keine Option ist:

Mit der Robot-Klasse kannst du Keyboard-Events verschicken:

try {
  Robot robot = new Robot();
  robot.keyPress(KeyEvent.VK_A); // press 'a'
  robot.delay(100); // wait after each key press for some ms
}
catch (AWTException ex) {
  // handle exception ...
}

Aber zuerst musst du das entsprechende Fenster finden und fokussieren. Das lässt sich in Java aber nur über JNI oder (etwas einfacher) JNA vornehmen:

HWND handle = User32.INSTANCE.FindWindow(null, "Window title");

if (handle != null) {
  User32.INSTANCE.ShowWindow(handle, WinUser.SW_RESTORE);
  User32.INSTANCE.SetForegroundWindow(handle);
}

Statt Window title müsstest du natürlich den genauen Namen des geöffneten Konsolenfensters angeben. Alternativ könntest du auch nach dem class name des Fensters suchen (und für das zweite Argument stattdessen null angeben). Lies dazu hier. Den angesprochenen class name kannst du mit Spytools herausfinden (WinSpy, WinSpy++, ...).

Huhngut 
Fragesteller
 14.01.2020, 21:22

Danke sehr

0
Huhngut 
Fragesteller
 14.01.2020, 21:24

Ich habe eine Methode gefunden, die konsole per java zu öffnen.

Was müsste ich machen um zur konsole von der ich das runtime event habe zu schreiben?

0
Huhngut 
Fragesteller
 15.01.2020, 17:24

Gibt es eine möglichkeit per robot ein @ zeichen zu schreiben

0
Huhngut 
Fragesteller
 15.01.2020, 17:27
@Huhngut

Ich mache es jetzt per copy and paste und dem clipboard

0
regex9  15.01.2020, 19:04
@Huhngut

Ich würde mal sagen, so:

robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_Q);
robot.keyRelease(KeyEvent.VK_CONTROL)
robot.keyRelease(KeyEvent.VK_ALT);
0

Eehm, Keyboard eingaben fälschen? Ansonsten sehe ich nicht viel anderes.

Huhngut 
Fragesteller
 13.01.2020, 22:16

schade das geht ja leider nicht nur für das fenster sondern bezieht sich auf den ganzen Computer oder gibt es da eine möglichkeit

0
Dominic121219  13.01.2020, 22:19
@Huhngut

Ich kenne Java nicht sehr gut, kann mir aber vorstellen, dass dies nicht geht. Bei c++ kannst du den Process handle finden und so die Kontrolle über einen Prozess übernehmen. So kann man auch stdin und stdout übernehmen. Aber da dies ziemlich advanced win api calls sind, denke ich nicht das JAVA das kann. Vlt mal googeln?

0
Huhngut 
Fragesteller
 13.01.2020, 22:28
@Dominic121219

habe ich aber auf die schnelle nichts gefunden ich schaue parallel immer weiter

1