CMD ausgabe abfangen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von SystemException.

    CMD ausgabe abfangen

    Hallo,

    ich habe bei meiner Anwendung 2 Buttons mit CMD Befehlen hinterlegt, die diese dann ganz stupide ausführen. Nur bekomme ich ja so auf diese Weise keine Rückmeldung. Kann ich das, was normalerweise in der CMD-Box als "Antwort" steht irgendwie abfangen und in eine Textbox packen?

    Danke!

    HeizungAuf5 schrieb:

    Das ist C#. Ich bräuchte VB.
    Dann nimm Dir einen Automaten umd übersetze das selbst. ;)
    Tools dazu findest Du in der Signatur einiger Mitglieder.
    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!
    Hint:
    Oben rechts auf der Webseite lässt sich die Sprache einstellen. Neben C++, F# und C# gibts auch VB.NET.

    Edit:
    Das tolle ist ja, mit Ausnahme von einer oder zwei Zeilen ist der gezeigt Code zwischen VB.NET und C# absolut identisch. Na gut, die Semikolons fehlen. Aber das ist noch der allerkleinste unterschied zwischen VB.NET und C#

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „EaranMaleasi“ ()

    Mal ein völlig absurder Vorschlag:
    Suche doch man selbständig danach. z.B hier im Forum.
    Das Netz ist voller Informationenund Lösungen zu dem Thema !
    Falls du immer noch suchst, obwohl sogar einige hier in dem Thread einen solchen Konverter in der Signatur haben:
    Guck ma hier: Klick mich endlich!

    Heute schon das zweite mal, dass jemand mit der Ausrede kommt ^^
    LG ~ David
    Bitte benutze OPTION STRICT ON.
    Und optional OPTION EXPLICIT ON.
    Hier ein CODE-CONVERTER.

    Suchanfragen-Ansatz für GOOGLE.
    Prüfe deinen Beitrag in einer RECHTSCHREIBPRÜFUNG.

    Schon in den Posts #6 und #7 wurde darauf hingewiesen, dass ein Converter gar nicht notwendig ist.

    Aber es ist vermutlich völlig egal, da der TE entweder das Problem gelöst oder aufgegeben hat.
    Jedenfalls scheint sein Interesse an diesem Thread verflacht zu sein.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hi.

    Zum Thema zurück...

    Die "Console" hat Ein- und/oder Ausgangs-pipeline(s).

    Wenn ein Konsolenfenster (CLI/Terminal/Eingabeaufforderung), nach dem drücken der Enter/Eingabe-Taste, zu arbeiten beginnt, kann das Programm, über STDOUT oder DEBUG oder TRACE, die vom Programmierer forgegebenen Texte ausgegeben.

    Beim Programmieren mit Visual Studio z.B. gibt es das Ausgabefenster, das Direktfenster etc. wo beim Kompilieren oder Debuggen die Ausgaben stehen.

    VB.NET-Quellcode

    1. Dim processStartI As New ProcessStartInfo
    2. processStartI.Arguments = combinedArgs.ToString()
    3. 'combinedArgs ist eine Externe Variable, die die Argumente dem Konsolenprogramm übergibt.
    4. 'Welche das sind, ist im diesem Beispiel unwichtig.
    5. processStartI.UseShellExecute = False
    6. processStartI.RedirectStandardOutput = True
    7. processStartI.RedirectStandardError = True
    8. processStartI.RedirectStandardInput = True
    9. processStartI.CreateNoWindow = True


    Mit diesem kurzen "Code" als Anhaltspunkt, kann die Kommandozeilen-ausgabe umgelenkt werden.

    processStartI.RedirectStandardOutput = True
    -----> (STDOUT) Das sind die Zeilen (Ausgabe/OUT) aus dem Programm, die zum Userinterface geschickt werden.

    STDOUT = StandardOutput = das was bei Matrix, dem Film, in grün den Bildschirm runter rieselt... ;)

    Soll ein erprobtes CLI-Programm in eine GUI eingebunden werden, kann die Steuerung mit hilfe der Pipelines (STDIN und STDOUT) umgesetzt werden.

    Häufig bei Packern oder bei Konverterprogrammen anzutreffen.
    Beispielhafte Programme die sowas nutzen (keine Werbung, nur als referenz):
    TotalCommander der die Packer (.exe-Dateien) einbindet und somit den Fortschritt anzeigen kann, oder die Auflistung (der Inhaltsvorschau der Dateistruktur).

    FFmpeg ist mit hilfe mehrer Verschiedener GUI´s ausgestattet worden, und ist mit der Umlenkung (Thema: Abfangen) realisiert.

    Ich selbst nutze das "Abfangen", um Programme/Tools von anderen Programmierern, in meine Graphische-Oberfläche einzubinden.

    Ein Anwendungsfall ist die Umformatierung der Ausgabe, um etwas farblich hervorzuheben.
    So habe ich mehrere Kommandozeilenprogramme, die alles in ein Texteditor-Control (Avalon WPF, wieder keine Werbung...) schickt, und die Syntaxhervorhebung hier mir die wichtigen Informationen grafisch 'aufpeppt' .

    Zu beachten sind Dinge wie folgendes:

    VB.NET-Quellcode

    1. Dim dasKommandozeileDingsie As Process
    2. dasKommandozeileDingsie = New Process
    3. dasKommandozeileDingsie.EnableRaisingEvents = True
    4. AddHandler dasKommandozeileDingsie.ErrorDataReceived, AddressOf ErrorRecieved
    5. AddHandler dasKommandozeileDingsie.OutputDataReceived, AddressOf DataRecieved
    6. AddHandler dasKommandozeileDingsie.Exited, AddressOf UnpackerExited
    7. dasKommandozeileDingsie.StartInfo = processStartI
    8. dasKommandozeileDingsie.Start()
    9. dasKommandozeileDingsie.PriorityClass = ProcessPriorityClass.RealTime
    10. dasKommandozeileDingsie.BeginOutputReadLine()
    11. dasKommandozeileDingsie.BeginErrorReadLine()


    dasKommandozeileDingsie -> angenommen "7zip.exe", und zum letzten mal keine Werbung, nur gängige namen...

    .EnableRaisingEvents = True -> Events/Ereignisse Abfangbarmachen

    Die Ereignisbehandlungsroutinen.

    AddHandler dasKommandozeileDingsie.ErrorDataReceived, AddressOf ErrorRecieved
    AddHandler dasKommandozeileDingsie.OutputDataReceived, AddressOf DataRecieved
    AddHandler dasKommandozeileDingsie.Exited, AddressOf UnpackerExited

    ErrorRecieved, DataRecieved und UnpackerExited.

    Sind frei erfundene Namen, aber das sind die Methoden der Ereignisse.
    Es ist fast selbsterklärend was die "Handler" als aufgabe haben.
    UnpackerExited, ist in meinem Programm zum abfangen des Ereignisses, ob das "dasKommandozeileDingsie" ausgestiegen ist (Fehler und abbrüche).

    Starten der Ein- bzw. Ausgaben

    dasKommandozeileDingsie.BeginOutputReadLine()
    dasKommandozeileDingsie.BeginErrorReadLine()

    Das ist zwar aufwändig, aber es lohnt sich das mal auszuprobieren...

    Mehr sage ich nicht zum Thema, bin jetzt bockig...

    c.u. Joshi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Joshi“ () aus folgendem Grund: kleine Fehler in der Code-Darstellung und einige Tippfehler...

    EaranMaleasi schrieb:

    """"Heute"""" ;)


    Ouhhhh danke... haha :rolleyes:

    Joshi schrieb:

    Hi.
    Zum Thema zurück...


    Die Lösung wurde bereits gepostet :thumbsup:
    Hab das auch schon mehrmals so genutzt und hatte keine Probleme.

    Mfg!
    Bitte benutze OPTION STRICT ON.
    Und optional OPTION EXPLICIT ON.
    Hier ein CODE-CONVERTER.

    Suchanfragen-Ansatz für GOOGLE.
    Prüfe deinen Beitrag in einer RECHTSCHREIBPRÜFUNG.