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!!!


Anmelden zum Antworten