Abfragen ob CMD Fenster noch läuft?



  • Hallo Zusammen,
    ich starte in meinem Programm eine .bat Datei über folgenden Aufruf:

    void RunApplication(LPCTSTR FileName, LPCTSTR FileParam)
    {
      int ret = (int) ShellExecute(0, "open", FileName, FileParam, 0, SW_SHOW);
    
      if (ret <= 32)
      {
    	String msg;
    
        switch(ret)
        {
          case ERROR_FILE_NOT_FOUND, SE_ERR_FNF :
    			 msg = "Die angegebene Datei '" + AnsiString(FileName) + "' wurde nicht gefunden!";
                 break;
    
          case ERROR_PATH_NOT_FOUND, SE_ERR_PNF :
    			 msg = "Der Pfad zur Datei '" + AnsiString(FileName) + "' wurde nicht gefunden!";
                 break;
    
          case ERROR_BAD_FORMAT :
    			 msg = "Die aufgerufene Anwendung ist ungültig oder beschädigt!";
                 break;
    
          case SE_ERR_ACCESSDENIED, SE_ERR_SHARE :
    			 msg = "Der Zugriff auf die Datei '" + AnsiString(FileName) + "' wurde vom Betriebssystem verweigert!";
                 break;
    
          case SE_ERR_ASSOCINCOMPLETE, SE_ERR_NOASSOC :
    			 msg = "Der angegebene Dateityp ist auf Ihrem Computer keiner Anwendung zugeordnet!";
                 break;
    
          case 0, SE_ERR_OOM :
    			 msg = "Zum Ausführen der Anwendung ist nicht genügend Arbeitsspeicher frei!";
                 break;
    
    	  default : msg = "Datei '" + AnsiString(FileName) + "' konnte nicht geöffnet werden!";
        }
    
    	//Application->MessageBox(msg, "Fehler", MB_OK + MB_ICONERROR);
    //	Application->MessageBox(msg.c_str(), L"Fehler", MB_OK + MB_ICONERROR);
    MyMessageBox(msg, "Fehler", MB_OK + MB_ICONERROR);
      }
    }
    .....
    RunApplication("Dauerposter\\a4drucken.bat", "0");
    

    Gibt es eine Möglichkeit abzufragen, ob das cmd Fenster der .bat noch läuft oder geschlossen ist?
    Ich rufe nach dem Befehl RunApplication eine MessageBox auf. Die kommt aktuell direkt nach dem geöffneten cmd Fenster. Es wäre aber schön, wenn die MessageBox erst kommt, wenn das geschlossen ist.

    Danke im voraus.



  • Benutz´ statt ShellOpen CreateProcess , da kannst du auf das Prozessende warten. Die MSDN Hilfe sollte ein Beispiel dafür haben.


Anmelden zum Antworten