Interaktion mit Dos-Exe aus der Anwendung heraus?



  • Hallo,

    folgendes Problem:

    Ich rufe über meim Programm eine Dos-Exe auf, die auf eine Benutzereingabe wartet und sich anschließend beendet.

    ich habe es soweit geschaft, dass die exe gestartet wird(Es öffnet sich die Dos-Box und es wird auf eine Eingabe gewartet).

    Wie kann ich nach dem start etwas in dieser Dos-Box eingeben (Über das c++-Programm versteht sich). Das ganze soll automatisiert ablaufen.

    Ich habe herausgefunden, das das mit Pipes funktionieren soll. Nur wie genau?

    hier ist mein vorhandener Code:

    csExecute="C:\\test.exe";
    
      SECURITY_ATTRIBUTES secattr;
    
      ZeroMemory(&secattr,sizeof(secattr));
    
      secattr.nLength = sizeof(secattr);
    
      secattr.bInheritHandle = TRUE;
    
      HANDLE rPipe, wPipe;
    
      //Create pipes to write and read data
    
      CreatePipe(&rPipe,&wPipe,&secattr,0);
    
      //
    
      STARTUPINFO sInfo;
    
      ZeroMemory(&sInfo,sizeof(sInfo));
    
      PROCESS_INFORMATION pInfo;
    
      ZeroMemory(&pInfo,sizeof(pInfo));
    
      sInfo.cb=sizeof(sInfo);
    
      sInfo.dwFlags=STARTF_USESTDHANDLES;
    
      sInfo.hStdInput=NULL;
    
      sInfo.hStdOutput=wPipe;
    
      sInfo.hStdError=wPipe;
    
      char command[1024]; strcpy(command,  csExecute.GetBuffer(csExecute.GetLength()));
    
      //Create the process here.
    
    	//CreateProcess(0, command,0,0,TRUE,NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW,0,0,&sInfo,&pInfo);
      CreateProcess(NULL,command,
                    NULL,NULL,false,
                    CREATE_DEFAULT_ERROR_MODE | NORMAL_PRIORITY_CLASS,
                    NULL,NULL,
                    &sInfo,&pInfo);
    
      CloseHandle(wPipe);
    

    Bin für jede Hilfe dankbar



  • Du willst also vom C++-Programm aus was auf die DOS-(Simulations)-Box ausgeben, die dadurch entsteht, dass du ein anderes Programm (Konsolenprogramm) aufrufst.

    Steht vor der Ausführung des Konsolenprogramms fest, was ausgegeben werden muss?
    Wenn ja, dann solltest du das Konsolenprogramm ändern, Parameter ermöglichen und diese ausgeben.

    Wenn es etwas mehr Text ist solltest du das Programm einfach Eingabebereit machen und alles ausgeben lassen, was dort eingegeben wird, bis du das Dateiende liest. Beim Aufruf übergibst du dann einfach nur eine Datei mit < als Pipezeichen. Also:

    test.exe < datei.txt

    In der Datei sollte dann natürlich stehen, was du ausgeben willst :).



  • Also, das Konsolenprogramm, das ich ich aufrufe, habe ich nicht geschrieben. (Kann es also nicht verändern.

    Folgender Ablauf (in der Dos-Box):

    ich führe das programm aus mit einigen Parametern.
    Anschließend frägt das Programm nach einem Passwort.
    Nach erfolgreichem Passwort muss noch ein "Ja" eingegeben werden.



  • Also eine Möglichkeit wäre eine Datei per < umzulenken, wie ich es beschrieben habe.
    Die erste Zeile der Datei enthält das Passwort und die zweite Zeile das JA.

    Ansonsten haben die meisten Betriebssysteme (ich denke auch Windows) systemeigene Funktionen zum Ausführen eines Programms und Rückgabe eines Dateihandles bzw. -pointers um mit dem aufgerufenen Programm zu "kommunizieren". Dazu solltest du dir mal die MSDN anschauen.



  • das mit dem umleiten (<) geht nicht.

    Aber es hat sich erledigt, habe ein Parameter gefunden, der die Abfrage unterbindet. Die daten werden dann per Parameter übergeben.

    Dank dir trotzdem



  • test.exe>datei


Anmelden zum Antworten