Ausgabe in DOS-Fenster umleiten

  • Hallo liebe Community,

    nach einigen Versuchen habe ich festgestellt, dass es nicht möglich ist, mit ConsoleWrite() die Ausgabe auf die Eingabeaufforderung umzuleiten, ohne das Programm als DOS-Programm zu kompilieren.
    Außerdem ruft man das Programm ja nicht immer unbedingt aus einem Batch-Script auf, sondern startet es manchmal direkt oder aus dem Editor. Eine geeignete Lösung wie man den STD-Output umlenken kann habe ich nicht gefunden, nur hat mir das nicht gereicht.

    Das ist dabei rausgekommen und ich hoffe, dass es für den einen oder anderen von euch nützlich ist. Inkludiert die angehängte AU3 in eurem Script und ersetzt den Befehl "ConsoleWrite()" durch "Output()":

    Code
    #include "C:\Path\to\File\Output.au3"
    
    Output("Hallo Welt" & @CRLF)

    Wenn Ihr das Programm dann mit "/cmd" startet, wird die Ausgabe umgeleitet.
    Der Parameter "/MsgBox" zeigt Message-Boxen an, falls mal was zum debuggen sein sollte und "/NoSciTE" deaktiviert die Ausgabe im Editor.

    Mit "/file" lässt sich die Ausgabe auch in eine Datei umleiten. Die Parameter sind natürlich auch kombinierbar.

    • Offizieller Beitrag

    dass es nicht möglich ist, mit ConsoleWrite() die Ausgabe auf die Eingabeaufforderung umzuleiten, ohne das Programm als DOS-Programm zu kompilieren.

    Ich verstehe den Hintergrund nicht. Möchte ich beim Ausführen einer *.au3 eine Konsolenausgabe, landet diese im Konsolenfenster des Editors, in dem die *.au3 geöffnet ist - das passt.

    Mir fällt eigentlich keine Situation ein, in der ich aus der Entwicklungsumgebung eine Ausgabe in die Windows-Konsole senden wollte. Vielleicht kannst du ja mal ein entsprechendes Szenario erklären?

  • Hallo BugFix,

    die Funktion ist hauptsächlich für Programme nach dem Kompilieren gedacht. Im Editor funktioniert das ja auch alles einwandfrei und man benötigt die Umleitung nicht, da die STD-Ausgabe ja unten im Editor angezeigt wird.

    Wenn man aber das Skript kompiliert hat und es von CMD (oder aus einer Batch- oder Command-Datei) ausführt, hat man den Editor nicht mehr. ConsoleWrite() läuft dann ins leere und eventuell nützliche Informationen gehen dann verloren.

    Man kann jetzt das Script zwar als DOS-Programm kompilieren, um wieder die STD-Anzeige in der Command zu sehen, kann dann aber keine GUI-Elemente mehr nutzen.

    Ich nutze es für alles, was mit Batch-Dateien anfängt, anschließend mit AutoIt weiter läuft und dann wieder zu Batch zurückkehrt.

    Zum Beispiel kopiere ich während der Ausführung einer Batch einige Dateien, die manchmal umbenannt werden müssen. Das komplett in Batch zu machen ist nicht möglich, da die Umbenennung zu kompliziert ist und die vorhandene Batchdatei umzuschreiben ist zu aufwändig. Also mach ich eine kleine exe und füge diese in die Batch-Datei ein. Ob der Kopiervorgang erfolgreich war, ist dann im CMD-Fenster zu erkennen und bei zu komplexen Umbenennungen wird der User per GUI gefragt.

    • Offizieller Beitrag

    Du kannst doch ein Skript mit GUI auch als cui Kompilieren. Dann klappt das mit der Ausgabe in die Windows-Shell.

    Folgendes Skript als cui kompiliert und aus der Windows-Shell gestartet:

  • Okay, der Switch war mir komplett neu. Leider funktioniert das bei mir auch nicht, aber die #AutoIt3Wrapper-Befehle haben bei mir noch nie funktioniert.

    Das schöne an Deinem Change2CUI ist, dass man nicht jede ConsoleWrite-Funktion umbenennen muss. Nicht so schön ist, dass man dann immer das DOS-Fenter hat und bei mir nur die Ausgabe umgeleitet wird, wenn man die exe aus CMD mit "/cmd" startet.

    Mit dem Keyword hab ich folgenden Post gefunden: Debug mit Change2CUI

    Der User veronesi hatte vor 8 Jahren das selbe Problem und hat es genauso gelöst wie ich. ^^

    Bisher hatte ich bei meinen Recherchen nur User mit dem Problem gefunden und die Nicht funktionierenden Vorschläge mit StdoutRead, StdinWrite oder ControlSend.