C++ und batch
-
Hallo!
Nun ich habe mich gefragt, ob es möglich ist einen Batchcode in meinem c++ Programm zu verwenden.Also nicht, das man z.B. die Batchdatei über system(); oder CreateProcess(); sondern das der Code der eigentlich in der Batchdatei stehen würde, in meinem c++ code steht.Mein Freund und ich wollten da was basteln, ein server wird eben über diese batch gestartet, das sieht aber so langweilig aus, also bisschen farbe und struktur....
:xmas1:
-
Nicht getestet, aber evtl. so:
#include <windows.h> LPCWSTR text= L"Das Skript wird nun ausgeführt.", caption=L".bat-Launcher"; char *filename="batch.bat"; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ MessageBox(NULL, text, caption, MB_OK); system(filename); return 0; }
-
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 batchecho 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 XYX = 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