Per Skript in ein Konsolenprogramm Befehle eingeben

Ocram127

Cadet 4th Year
Registriert
Apr. 2020
Beiträge
123
Hallo zusammen!

Ich habe ein (wahrscheinlich sehr einfach zu lösendes) Problem:
Ich habe ein Konsolenprogramm (müsste meines Wissens nach in C++ geschrieben sein) und möchte dies automatisiert ausführen. Das Programm per Skript auszuführen ist kein Problem, allerdings schaffe ich es nicht, mit meinem Skript Programmspezifische Befehle auszuführen.
Mein Skript öffnet das Programm, dann muss ich manuell den Befehl zum Programm beenden eingeben und erst danach fährt mein Skript mit den Befehlen, die eigentlich für das Konsolenprogramm gedacht waren, fort. Ich möchte aber, dass mein Skript die Befehle im Programm eingibt, nicht erst, wenn dieses manuell wieder geschlossen wurde.

Ich habe beim googlen leider nichts gefunden, eventuell hab ich auch die falschen Suchbegriffe verwendet, ich kann mir eigentlich nicht vorstellen, dass das so schwierig sein kann...

Als Skriptsprache dachte ich an Batch, Powershell oder VBS, eventuell auch Java (ich bin aber eigentlich der Meinung, dass es einfacher, als mit Java gehen muss).

Kann mir da jemand weiterhelfen?
 
dann zeig doch mal ein skript und was nicht klappt..
Ocram127 schrieb:
Batch, Powershell oder VBS, eventuell auch Java (ich bin aber eigentlich der Meinung, dass es einfacher, als mit Java gehen muss).
sind in etwa bei dem was du beschreibst gleich "schwierig"
 
Hatte auf eine allgemeine Lösung gehofft:)

Ich habe bisher nur ein einfaches Test Batch Programm geschrieben, mit dem habe ich es nicht hinbekommen:
Code:
@echo off
echo hallo welt
pause

cd C:\\users\<MeinBenutzer>\desktop\
server.lnk

REM Ab hier wartet der Skript, bis ich das Programm schließe
help
stop

echo Programm ist beendet
pause

Aber eigentlich ist der Skript egal, ich habe ja noch nicht mal einen Ansatz für eine Lösung, ich nehme an, mit dem könnt ihr auch noch nicht sehr viel anfangen.
 
Wenn ich dich richtig verstanden habe wäre das hier vielleicht eine Lösung:
https://www.autoitscript.com/site/
Damit kann man Eingaben an Programme skripten.

Glaube von MS gibts was ähnliches (Powerautomate oder DesktopAutimation?) Hab ich aber nie benutzt.
 
  • Gefällt mir
Reaktionen: Ocram127
Nein, den Skript habe ich geposted, das Konsolenprogramm ist server.lnk. Und Ja, das ist eine Verknüpfung, die momentan noch auf dem Desktop liegt, ich später aber noch ändern will.

Es wurden ja schon ein paar gute Suchbegriffe genannt, die schaue ich mir gerade an.
 
Batch ist für sowas eigentlich nicht gedacht. Batch ist eine Stapelverarbeitung, die eigentlich nur eine Sequenz von Befehlen nacheinander und wiederholbar wiedergeben soll, zB "kopieren, umbenennen, zippen".

Wie dem auch sei, schau dir mal das hier an: SendKeys in Batch File

Damit startest du deine Anwendung (bei dir dann server.lnk) und mit SendKeys schickst du Eingaben an eben diese Anwendung. Kann funktionieren, muss aber nicht unbedingt. Ausprobieren.
 
  • Gefällt mir
Reaktionen: Ocram127
Klammert euch bitte nicht so sehr an meinen Batch Skript von oben. Ich wiederhole nochmal: DAS IST NUR EINE TESTDATEI GEWESEN, bei weitem nicht fertig ausgereift, ich wollte nur mal selber ein bisschen probieren, nachdem ich durch googlen nichts selber gefunden habe.
Ob ich wirklich batch verwende, steht noch in den Sternen, ich bin für alle anderen Vorschläge auch offen. Meine Frage war eher so gemeint, dass ich das WIE ich mein Problem im Allgemeinen umsetzen kann wissen will, nicht was ich an meinem Skript von oben genau ändern muss. :)
 
Der Ansatz ist ganz allgemein "SendKeys". Damit schickst du Eingaben an eine Anwendung. Beispiele dafür gibt es bei google en masse, zB auch SendKeys in PowerShell

Sicherlich gibt es noch andere Möglichkeiten, aber probier es einfach mal aus ob das dein Problem schon löst oder nicht.
Ergänzung ()

Eventuell wäre auch autoit einen Versuch wert. Kommt halt darauf an was du konkret machen willst, in welcher Anwendung, etc.
 
  • Gefällt mir
Reaktionen: smashcb
Konkret möchte ich verschiedene Skripte haben, die unterschiedliche Befehle des Konsolenprogramms ausführen. Zusätlich sollen die Skripte das Konsolenprogramm überhaupt ausführen können.

Ich dachte an einen Skript, der den vorgefertigten Befehl "stop" um eine bestimmte Uhrzeit ausführt,
einen Skript, der das Programm startet und mit ein paar Befehlen anfangs richtig konfiguriert und einen Skript, der beim aufrufen alle möglichen logs hintereinander ausgibt.
Also im Prinzip sind das alles nur hintereinander ausgeführte Befehle, bei einem Skript müsste noch gewartet werden, bis das Programm fertig gestartet ist.

Beim Konsolenprogramm handelt es sich um eine selbst programmierte Anwendung eines ehemaligen Kollegen von mir. Aber eigentlich sollte das doch egal sein, schließlich will ich ja eine Lösung wie ich Konsolenprogramme universell mit einem Skript "steuern" kann.
 
Egal ist erstmal grundsätzlich gar nichts. Computer, Betriebssysteme und Anwendungen sind komplexe Dinge, die sich nicht unbedingt immer gleich verhalten müssen.

So verhält sich beispielsweise eine Anwendung mit GUI gänzlich anders als ein reines Konsolenprogramm. Bei ersterem käme es darauf an wo der Cursor beim Start landet und wo man etwas eingeben möchte. Dazu würde man beispielsweise mittels SendKeys ein paar mal TAB schicken bis man (hoffentlich) im richtigen Feld landet und die Eingabe schicken kann. Eine Konsolenanwendung hingegen kennt keine TAB-Navigation. Also sind das schon mal zwei Paar Schuhe.

Ein weiteres Problem ist, dass SendKeys an das aktive Fenster schickt. Rutscht also ein anderes Fenster in den Vordergrund, landen die Eingaben dort. Um es einigermaßen zuverlässig zu gestalten, müsste man also sogar das richtige Fenster suchen und in den Vordergrund holen, zB anhand der Prozess-ID.


Es mag für dich im Kopf alles einfach sein, aber für den PC ist es das eben nicht und häufig steckt der Teufel im Detail - und diese Details sind bei einer Lösungsfindung stets wichtig, weil man dir sonst im Zweifelsfalle Lösungen anbietet, die in deinem Fall gar nicht anwendbar sind.
 
Zuletzt bearbeitet: (typo)
  • Gefällt mir
Reaktionen: proserpinus
Raijin schrieb:
Egal ist erstmal grundsätzlich gar nichts. Computer, Betriebssysteme und Anwendungen sind komplexe Dinge, die sich nicht unbedingt immer gleich verhalten müssen.
Ja stimmt, dann tuts mir leid, dass ich nicht gleich meinen konkreten Fall deutlich gemacht habe.


Wenn ich dich richtig verstanden habe, eignet sich SendKeys auch nur bedingt für eine Konsolenanwendung.
Korrigiert mich gerne, wenn ich falsch liege, aber an sich könnte man eine Konsolenanwendung doch auch als GUI behandeln, schließlich öffnet sich auch ein Fenster und sobald das aktiv ist, legt man mit Tastatureingaben los.
 
Ocram127 schrieb:
an sich könnte man eine Konsolenanwendung doch auch als GUI behandeln, schließlich öffnet sich auch ein Fenster und sobald das aktiv ist, legt man mit Tastatureingaben los.
Sicherlich. Ich wollte nur darlegen warum Details eben doch wichtig sind. Dazu zählt nicht nur die konkrete Anwendung, die du steuern willst, sondern eben auch das Werkzeug, mit dem du es tun willst. Es gibt in der IT eher selten eine allgemeingültige Lösung für alle Szenarien, sondern sie bewegen sich meistens in einem ganz konkreten Kontext.

Probier doch einfach mal die Links aus, die ich oben gepostet habe. Wenn das funktioniert und deinen Ansprüchen genügt, ist doch alles gut. Wenn nicht, muss man tiefer einsteigen und beispielsweise die Prozess-ID des Zielfensters auslesen, um die Eingaben korrekt abzuschicken. Denn wie gesagt: Wenn da ein Fenster dazwischenpoppt, landen die Eingaben dort. SendKeys ist tatsächlich 1:1 wie eine Eingabe an der Tastatur zu verstehen, das Skript tippt dann einfach drauf los, egal ob die Anwendung schon fertig geladen ist, ob sie im richtigen Zustand ist oder ob überhaupt die richtige Anwendung den Tastatur-Fokus hat. Heißt: Wenn du das Skript so baust, dass es die bla.exe startet, 5 Sekunden wartet bis bla.exe eingabebereit ist, du aber in der Zwischenzeit Notepad startest, landen die SendKeys in Notepad und nicht in der bla.exe

Wie auch immer, probieren geht über studieren. Teste obige Batch- bzw. PowerShell-Skripte und ggfs auch AutoIT, das speziell für die Automatisierung von Anwendungen gedacht ist.
 
  • Gefällt mir
Reaktionen: Ocram127
Zurück
Oben