Java in ein bestimmtes fenster schreiben?
Ich habe eine Konsole(cmd) die nicht von Java aus gestartet wird und nicht immer im vordergrund sein kann.
Jetzt möchte ich per Javaprogramm in diese konsole etwas schreiben.
Wie mache ich das am besten
2 Antworten
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++, ...).
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?
Eehm, Keyboard eingaben fälschen? Ansonsten sehe ich nicht viel anderes.
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
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?
habe ich aber auf die schnelle nichts gefunden ich schaue parallel immer weiter
Gibt es eine möglichkeit per robot ein @ zeichen zu schreiben