In bereits geöffneter CMD / Batch schreiben?

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Gonger96.

    In bereits geöffneter CMD / Batch schreiben?

    Grüße euch :)

    Habe mir jetzt 'ne gute Zeit lang die Finger wund gesucht in Google etc. allerdings nichts genaues zu meinem aktuellen Problem gefunden..

    Mein vorhaben ist folgendes: Ich öffne per Button-click eine FILE.bat, diese bleibt auch bestehen, jenachdem entweder unsichtbar oder sichtbar.

    Bei meinem Programm ist die Voreinstellung aber unsichtbar, da mich an und für sich gar nicht interessiert was darin steht, sichtbar mache ich sie eigentlich nur wenn ich merke etwas stimmt nicht und lese mir den Quark durch.

    Jetzt würde ich dem ganzen aber gerne einen Befehl zukommen lassen. Natürlich, ist die .bat sprich die CMD sichtbar kann man das einfach so eintippen und die Geschichte ist gegessen.

    Da ich aber nun mal von dem Fall ausgehe dass die CMD unsichtbar bleibt besteht nun also folgendes Problem: Wie lasse ich der CMD einen Befehl über einen Button-Click zukommen?

    Und bevor man mir jetzt mit dem Vorschlag kommt "Öffne doch eine zweite CMD per Batch worin du den Befehl ausführst" schön wäre es wenn das klappen würde, dann wäre ich ja bereits fertig, der Befehl muss aber in die CMD geschrieben werden, welche durch die .bat geöffnet wird bei dem ersten Button-Click, kann also keine zweite hinterher schicken, da die erste das ja sonst nicht erkennt + die CMD dann ausgibt "konnte den Befehl XYZ nicht finden(zuordnen)"

    Gibt's da eine einfache Lösung oder ist das schier unmöglich in VB.net? Habe schon mit dem Gedanken gespielt das ganze in eine .dll zu packen (sprich den Befehl) und diesen im nachhinein per Buttonclick in den Prozess zu injecten.

    Die Inject-methode wäre ein Versuch wert, obwohl ich mir sicher bin dass das nicht klappen wird :D

    Eventuell habt ihr ein paar Tipps für mich.

    Liebe Grüße
    @Flauschi Mal sehen, ob ich Dich richtig verstanden habe.
    Du startest eine Batch, sie läuft eine Weile lang.
    Du willst die laufende Batch editieren und dieser laufenden Batch einen weiteren Befehl anhängen.
    ====
    Was Du mit sichtbar bzw nicht sichtbar meinst, verstehe ich nicht.
    ====
    Rein programmtechnisch ginge das mit

    VB.NET-Quellcode

    1. IO.File.AppendText(PFAD_ZUR_BATCH, DER_NEUE_BEFEHL & Environment.NewLine)
    ====
    Teste folgendes:

    Quellcode

    1. pause
    2. kdfvlsd
    3. rem pause
    Starte diese Bat und editiere sie, indem Du in der Zeile 3 das "rem" löschst:

    Ganz einfach. :thumbsup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Werd ich gleich mal probieren, vorerst schonmal vielen Dank für die Mühe der Antwort.

    Bin grad dabei das per DLL-injection zu testen, bzw noch am Coden danach seh ich ja wie das geht. Aber werde deines auch versuchen, klingt zumindest einfacher hehe.

    Mit unsichtbar / sichtbar meiine ich:

    Angenommen man starte die Batch so:

    VB.NET-Quellcode

    1. Dim path As String = Application.StartupPath()
    2. Dim p As New Process()
    3. p.StartInfo.FileName = (path & "FILE.bat")
    4. p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    5. p.Start()


    Dann ist die geöffnete .bat sprich CMD ja versteckt und nicht mehr ersichtlich für den Jenigen der den Button betätigt, lässt man das ProcessWindowsStyle.Hidden, sprich die ganze Zeile weg ist die .bat / CMD wieder sichtbar.

    Wenn sie sichtbar ist kann ich ja easy-peasy einen Befehl eintippen und er führt diese aus. Ist sie nicht sichtbar kann ich ja schlecht einen Befehl eintippen, weshalb ich das eig. über Button regeln möchte.

    Da find ich eben deinen Ansatz so wie du ihn gepostet hast echt super, bin gespannt ob das auch in versteckter Form funktioniert :D

    Das ganze Hidden/nonHidden hab ich vorerst über 2 seperate Buttons laufen lassen. Am anfang des Knopfdruckes überprüft er den My.Settings.visible wenn dieser 1 ist wird die .bat angezeigt, wenn nicht versteckt.

    Hoffe konnte das gut rüber bringen wie ich das meine :D

    Melde mich sobald ich deines getestet habe! :)

    Flauschi schrieb:

    Ist sie nicht sichtbar
    Ist das doch ein Missverständnis:
    Meinst Du das Eingeben eines Befehls in das CMD-Fenster, dass durch die Barch-Datei geöffnet wird und das ggf. hidden ist
    oder
    meinst Du Editieren der Batch, in der ein Befehl ein CMD-Fenster öffnet, das ggf. hidden ist?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Öhm okay da versteh ich dich wohl jetzt falsch... ich versuchs mal an dem Beispiel "Minecraft" ersichtlich zu machen, da ich mal davon ausgeh damit hatte sich zumindest jeder schonmal etwas beschäftigt, auch was server angeht.

    Dann mal go: Also wir downloaden uns jetzt einen Bukkit-Server (Glaub aktuell sogar Craftbukkit?) den wollen wir Starten, dazu brauchen wir aber eine Batchfile.

    In der steht dann der Startbefehl drin. Wenn man aber den Server startet endet ja nie die CMD mit einem "Bitte beliebige Taste drücken..." da der server ja läuft.

    Denke mal jeder kennt auch den "op XYZ" befehl oder "stop" befehl.

    Die trägt man dann bspw ein, der Server macht das dann. Und so ungefähr ist meine Batch aufgebaut. Jetzt nicht direkt ein Server, allerdings auch eine Batch die so agiert und auch so auf Befehle reagiert.

    Mein Programm kann diese Batch aber verstecken wie oben schon gesagt. Sprich der Button müsste bei "Click" in die versteckte Console "stop" (bspw) schreiben und das ganze mit Enter bestätigen.

    // Bin gestern leider nicht mehr dazu gekommen deines zu testen, hab auch die injection nicht mehr fertig bekommen da ich dann weg musste ^^ setze mich vermutlich heute/morgen aber ran, jenachdem wie ich Zeit habe.

    Hoffe man konnte es so verstehen, glaub wir reden uns da bisschen aneinander vorbei hehe :D (Bin leider etwas schlecht im erklären)

    Zu meinem injection versuch: Da möchte ich dann halt einfach in die "X.dll" reinschreiben "stop" durch die Injection soll das ganze ausgeführt werden (So zumindest mein Gedanke, sehe ja wenn ich fertig bin ob das lüppt :P)

    Flauschi schrieb:

    da ich mal davon ausgeh damit hatte sich zumindest jeder schonmal etwas beschäftigt
    Sorry, ich nicht. ;(
    Ich versteh immer noch nicht, was Du willst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Argh :D

    Sag ja im erklären bin ich wirklich eine 0 :P

    Ich versuchs mal so: Per Knofdruck soll Textbox1.Text in die bereits laufende CMD.exe (ggf .bat) geschrieben werden + der Enterbefehl ausgeführt werden.

    Nur dass diese CMD.exe nicht sichtbar ist sondern unsichtbar. Man den Befehl also auf eine nicht Sichtbare CMD.exe ausführen soll per Knopfdruck.

    Öh ähm hoffe jetzt konnte ich es gut rüberbringen. Falls nicht weiß ich auch nicht mehr wie ich das machen soll xD

    ( Ich hab später noch etwas Zeit, da setz ich den rest meiner Injection mal um. Wenn es damit klappt wäre ja soweit eh die Sache gegessen, wenn nicht müsste ich schauen wie ich eine Console Livetime auslesen kann und in eine Picturebox ausgeben kann ggf. Richtextbox, da fehlt mir aber auch der funke, aber denke darüber gibts dann genug Berichte die das machen, denn würde ich das integrieren könnte ich das einfacher umsetzen, momentan ist ja das Problem dass eben diese Console noch extern angezeigt wird. Mal sehen :D )

    EDIT: Injection funktioniert nicht... kann der natürlich nich zuordnen -.-

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Flauschi“ ()

    Notfalls könnte man ggf noch was mit Eingabesimulation machen, aber was zum Geier willst Du denn für batch-Befehle schicken, die man unbedingt über die Konsole laufen lassen muss? Ist das überhaupt die echte Windows-Konsole (CMD.exe) oder geht es um ein anwendungs-/spielinternes Konsolenfenster, was für anwendungsspezifische Textbefehle verwendet wird?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.