C++ und batch



  • Er wollte ja gerade kein system benutzen.

    Selbstverständlich kannst du die Funktionalität deines Skripts nachprogrammieren. Die Frage ist, wie sinnvoll das ist...



  • Farbe?
    Suchst du so was:
    http://www.codeproject.com/KB/dialog/BatchFileColors.aspx?display=Print
    Hab das nicht eingehend angesehen.

    Unter DOS war das damals so, wenn man vergass die Farbattribute zurückzusetzen, blieben die in den folgenden Programmen erhalten bis da eingegriffen wurden.

    Unter Win32 werden die Farbattribute zurückgesetzt.

    Der "Textbildschirm" unter DOS enthielt die Information von Zeichen und Farben.
    Vielleicht kommt man da unter Win32-Console auch noch dran. Unter DOS ging das direkt. Unter Windows ist vieles abgeschirmt.

    Sonst mal "batch color" oder ähnliches in die Suche eingeben und schauen ob die Ergebnisse heute noch funktionieren.

    Ist Windows Script statt Batch für euch eine Alternative?

    MfG f.-th.



  • @Thuruk So könnte man das machen, aber so wollte ich das ja nicht machen.

    @f.-th. Danke für deine Antwort, aber das war nicht mein Problem/Frage.Aber Das mit dem Windows Script hört sich interesant an?Was genau ist das ?



  • Also:

    Ich wollte es eigentlich so haben, das der output von der batch datei in meinem win32 console angezeigt wird.
    Z.B. wenn in meiner batch

    echo TEST
    

    steht, bigt es dann irgendwas was so sein könnte :

    batchstring meinbatch= "msg * hallo";
    Batchexec(meinbatch);
    

    Also meine Frage ist nur die Frage der Möglichkeit, nichts mit farbe und extra Zeug.Alle die wege die bis jetzt kamen kenn ich schon, deswegen interessiert mich ob es so was wie im code bsp gibt



  • Dunkel ist der Rede Sinn ...

    1. Output der Batch-Datei wird standardmäßig auf der Win32 Konsole ausgegeben.
    2. Die beiden Code-Fragmente stehen in keinerlei Zusammenhang miteinander ... ?!



  • Hallo

    color syntax:
    color XY

    X = Hintergrundfarbe
    Y = Textfarbe

    @echo off
    color 9c
    echo Ich bin ein roter Text auf blauem Hintergrund!
    pause
    
    C:\Dokumente und Einstellungen\User>color ?
    Legt die Hinter- und Vordergrundfarben für die Konsole fest.
    
    COLOR [attr]
    
      attr      Gibt die Farbattribute für die Konsolenausgabe an.
    
    Farbattribute werden durch ZWEI hexadezimale Ziffern angegeben - die erste
    bezieht sich auf den Hintergrund, die zweite auf den Vordergrund. Jede Ziffer
    kann einen der folgenden Werte annehmen:
    
        0 = Schwarz        8 = Dunkelgrau
        1 = Dunkelblau     9 = Blau
        2 = Dunkelgrün     A = Grün
        3 = Blaugrün       B = Zyan
        4 = Dunkelrot      C = Rot
        5 = Lila        D = Magenta
        6 = Ocker          E = Gelb
        7 = Hellgrau       F = Weiß
    
    Wenn der COLOR-Befehl ohne Argument aufgerufen wird, werden die Farbein-
    stellungen wiederhergestellt, mit denen CMD.EXE gestartet wurde. Diese werden
    durch das aktuelle Konsolenfenster, die /T-Befehlszeilenoption oder durch den
    Registrierungswert "DefaultColor" bestimmt.
    Drücken Sie eine beliebige Taste . . .
    


  • EDIT: In meiner Frage ging es kein bisschen um Farbe!Warum dreht mir jeder hier an wie ich Farbe machen soll? 🙄

    Da es scheinbar keine andere möglichkeit gibt, hab ich das ganze jetzt über system(); gemacht
    Trotzdem danke an alle 😉



  • Öhm doch, dur sprachst von 'Farbe und Struktur', kann man ja wörtlich nehmen. 😉



  • Ja doch wie ich sehe hast du immernoch nicht meinen ganzen Post gelesen, sondern nur diese 2 Wörter.Die Frage steht ein Satz darüber, das was du gelesen hast ist das Ziel was wir haben.

    Aber egal



  • Kannst es mit CreateProcess machen... aber vorher die FileHandles umbiegen in eine unnamedpipe, von der Du dann den Output lesen kannst.

    STARTUPINFO         sInfo;
        PROCESS_INFORMATION pInfo; 
        ZeroMemory(&sInfo,sizeof(sInfo));
        ZeroMemory(&pInfo,sizeof(pInfo));
        sInfo.cb        =    sizeof(sInfo);
        sInfo.dwFlags    =    STARTF_USESTDHANDLES;
        sInfo.hStdInput    =    NULL;     // Stdin = muss null sein
        sInfo.hStdOutput=    wPipe;    // Stdout = muss write-pipe sein
        sInfo.hStdError    =    wPipe;    // Stderror = muss/darf write-pipe sein
    


  • Der Vorschlag von Lowbyte sollte es richten; die Standard-Handles vor Prozesserzeugung umbiegen und die Ausgabe dann ins Fenster schreiben.

    Ausserdem kann man noch auf das Ende warten:

    if(CreateProcess(0, szExe, 0, 0, FALSE, 0, 0, 0, &sInfo, &pInfo))
    {
    // optionally wait for process to finish
    WaitForSingleObject(pInfo.hProcess, INFINITE);
    
    CloseHandle(pInfo.hProcess);
    CloseHandle(pInfo.hThread);
    }
    

    Ausserdem kann man noch die Process Creation Flags (dwCreationFlags) z.B.
    mit CREATE_NO_WINDOW beeinflussen - auch Prioritäten u.a.

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms684863(v=vs.85).aspx

    Ein fettes Beispiel findet sich hier:
    Creating a Child Process with Redirected Input and Output
    http://msdn.microsoft.com/en-us/library/windows/desktop/ms682499(v=vs.85).aspx


Anmelden zum Antworten