• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

C++ Script zum verzögerten Start von Programmen

Timmer

Mitglied
Hey, ich bastel gerade an einem C++ Script zum verzögerten Starten von Programmen. Damit möchte ich beim Autostart Programme starten, dazwischen aber ein paar Sekunden warten.

Mein Problem: Größere Programme wie Eclipse oder Outlook geben anscheinend keine Meldung zurück, das Script stoppt bei diesen. Kleinere Programme wie Notepad++ oder Editor funktionieren problemlos...

Hier das Script:
Code:
#include <iostream>
#include <string>
#include <windows.h>
#include <iomanip>

using namespace std;

int main(){
    cout << setfill (' ') << "Programme werden gestartet..." << endl;
    
    //Outlook
    if(system("\"C:/Programme/Microsoft Office/Office12/OUTLOOK.EXE\"")){
        cout << endl << "Outlook wurde erfolgreich gestartet." << endl << endl;
        for (int i = 10; i > 0; --i){
            cout << "\rNaechster Start in " << setw(3) << i << " Sekunden.";
            Sleep(1000);
        }
    } else {
        cout << endl << "Outlook konnte nicht gestartet werden." << endl << endl;  
        Sleep(1000);        
    }
    
    //Eclipse
    if(system("\"C:/Programme/eclipse/eclipse.exe\"")){
        cout << "\rEclipse wurde erfolgreich gestartet." << endl << endl;
        for (int i = 10; i > 0; --i){
            cout << "\rNaechster Start in " << setw(3) << i << " Sekunden.";
            Sleep(1000);
        }
    } else {
        cout << "\rEclipse konnte nicht gestartet werden." << endl << endl;  
        Sleep(1000);        
    }
    
    //Firefox
    if(system("\"C:/Programme/Mozilla Firefox/firefox.exe\"")){
        cout << "\rFirefox wurde erfolgreich gestartet." << endl << endl;
    } else {
        cout << "\rFirefox konnte nicht gestartet werden." << endl << endl;  
        Sleep(1000);        
    }

    fflush(stdin);
    getchar();    
    return 0;
}
Das ist ein Beispiel mit 3 Programmen, der bleibt aber bei Outlook hängen, bekommt anscheinend keine Antwort von Outlook, Outlook wird aber trotzdem gestartet...

Hat jemand eine Idee, woran das liegen könnte?

[EDIT]

OK, mein Fehler! Egal, welches Programm gestartet wird, das Script bleibt stehen...
 
Zuletzt bearbeitet:
Hab ich schon gefunden, jedoch bring ich das überhaupt nicht zum laufen...

Ich habe mir jetzt mal ausgeben lassen, was die Programme bzw. der system() Befehl zurückgibt. Bei den meisten Programmen ist es garnichts, bis ich das Programm schließe (dann kommt 0 zurück). Bei Firefox dagegen kommt schon bevor sich das Fenster öffnet eine 1 zurück...

Kann ich irgendwie die laufenden Prozesse abfragen und prüfen, ob mein Programm gestartet ist?
 
Das Programm wird solange nicht weiterlaufen, bis der aufgerufene Befehl fertig ist. Bei Firefox liegt der Unterschied vermutlich darin, dass die firefox.exe einen neuen Prozess startet, welcher unabhängig davon läuft - firefox.exe kann dadurch beendet werden.


Ich bin momentan mit Ubuntu drin, daher kann ich es nicht selber ausprobieren. Aber eine kurze Suche liefert z.B. dieses Beispiel, versuchs mal damit.
 
Hmm, ok, ich sehe mir den Code an und verstehe nur Bahnhof ^^

So weit bin ich mit C++ noch nicht, in der Berufsschule krieg ich nichts beigebracht, muss ich warten, bis mein Buch erscheint und versandt wird ^^

Bis dahin benutz ich das Programm einfach ohne Textausgabe, einfache system()-Befehle mit nem Sleep() dazwischen :P
 
Das hat weniger mit fundierten C-Kenntnissen als mit Windows-spezifischen Funktionen zu tun. Wenn du den Code verstehen willst, musst du einzeln die Spezifikationen der Datentypen und Funktionen darin durchgehen.


Bis dahin benutz ich das Programm einfach ohne Textausgabe, einfache system()-Befehle mit nem Sleep() dazwischen :P
Das wird nicht funktionieren, der System-Call wird schließlich erst gemeinsam mit dem aufgerufenen Programm beendet. Das Problem liegt schließlich nicht in der Textausgabe, sondern in der Eigenart der System()-Funktion.
 
Doch, es funkioniert wunderbar ^^

Code:
#include <iostream>
#include <string>
#include <windows.h>
#include <iomanip>

using namespace std;

int main(){
    cout << setfill (' ') << "Programme werden gestartet..." << endl;
    
    //Outlook
    system("\"C:\\Programme\\Microsoft Office\\Office12\\OUTLOOK.EXE\"");
    cout << endl << "Outlook wurde gestartet." << endl << endl;
    for (int i = 10; i > 0; --i){
        cout << "\rEclipse wird in " << setw(2) << i << " Sekunden gestartet.";
        Sleep(1000);
    }
    
    //Eclipse
    system("\"C:\\Programme\\eclipse\\eclipse.exe\"");
    cout << "\rEclipse wurde gestartet.                                       " << endl << endl;
    for (int i = 10; i > 0; --i){
        cout << "\rFirefox wird in in " << setw(2) << i << " Sekunden gestartet.";
        Sleep(1000);
    }
    
    //Firefox
    system("\"C:\\Programme\\Mozilla Firefox\\firefox.exe\"");
    cout << "\rFirefox wurde gestartet.                                 " << endl << endl;

    Sleep(1000);

    cout << "Andwendung wird geschlossen.";

    Sleep(2000);

    //fflush(stdin);
    //getchar();    
    return 0;
}
[EDIT]

Ach ja, die Whitespaces sind dafür da, um den Text, der davor stand, zu löschen =)

[EDIT]

Jetzt bleibt das Script beim Firefox stehn... Blöd...
 
Zuletzt bearbeitet:
Zurück
Oben