CreateProcess() überschreibt STDOUT in Konsole?
-
Ich habe folgenden Code der Systembefehle wie ipconfig, net view, ... startet:
#include <windows.h> #include <iostream> #include <string> #include <atlbase.h> using namespace std; int execCommand(string str) { USES_CONVERSION; LPWSTR COMMAND = A2W(str.c_str()); STARTUPINFO siStartupInfo; PROCESS_INFORMATION piProcessInfo; memset(&siStartupInfo, 0, sizeof(siStartupInfo)); memset(&piProcessInfo, 0, sizeof(piProcessInfo)); siStartupInfo.cb = sizeof(siStartupInfo); if(CreateProcess(NULL, COMMAND, 0, 0, FALSE, NORMAL_PRIORITY_CLASS, 0, 0, &siStartupInfo, &piProcessInfo)) { WaitForSingleObject(&piProcessInfo, 0); CloseHandle(piProcessInfo.hProcess); CloseHandle(piProcessInfo.hThread); return 1; } else return 0; } int main() { do { cout << "Eingabe>>"; string input, COMMAND; getline(cin, input); COMMAND = input; cout << "Befehl:[" << COMMAND << "]" << endl; execCommand(COMMAND); }while(1); return 0; }Das Programm funktioniert aber es gibt ein Schönheitsfehler, ich hoffe ihr könnt mir helfen:
Sobald ich ein Befehl wie z.B. ipconfig oder net view eingegebe so kommt die Ausgabe des jeweiligen Befehls, aber gleich hinter der Ausgabe müsste die Prompt Zeile ausgegeben werden Eingabe>>. Die PRompt Zeile wird nur erst Ausgegeben sobald ich einmal ENTER drücke.
So müsste es normalerweise aussehen:[b]Eingabe>>[/b] [i]Befehl[/i] [i]Ausgabe Befehl[/i] [b]Eingabe>>[/b] [i]Befehl[/i]Wenn ihr mich nicht ganz verstanden habt, dann testet bitte den Code testen.
-
WaitForSingleObject(piProcessInfo.hProcess, INFINITE);
-
WaitForSingleObject(piProcessInfo.hProcess, INFINITE);
Hat auch nicht viel oder garnix gebracht, wenn ich ipconfig ausführe wird die Prompt 2 mal ausgegeben und erst dann der Befehl.
Hoffe jemand kann mir helfen.
-
kernel64 schrieb:
Hoffe jemand kann mir helfen.
tausch nicht nur das 'INFINITE' aus, nimm die *ganze zeile* von 'schön--'
:xmas2:
-
Ohhhhhh, ich hab gedacht im ersten Parameter steht das gleiche wie bei meinem Beispiel

Jetz klappts vielen Dank!!!