Anfänger braucht Hilfe beim Aufruf mit system()



  • Danke für die schnelle Antwort.

    Ich würde es ja so machen, doch später kommen dann noch printf´s und so hinein...
    Aber Windows-Programme, so weit sind wir noch nicht im Unterricht...

    Lieber nicht.

    Gibt es denn keine andere Lösung?

    //EDIT:

    Habe eine Lösung gefunden:

    #include <stdio.h>
    #include <conio.h>
    #include <windows.h>
    #include <string>
    #include <process.h>
    
    void makewindow()
    {
       while(1)
       	Sleep(9999);
    }
    
    int main(int argc, char **argv)
    {
       string arg1;
       string name=argv[0];
       name="start " + name + " -window";
    
       if(argc!=1) arg1=argv[1];
    
       FreeConsole();
    
       if(arg1=="-window")
       {
       	makewindow();
       }
    
       system(name.c_str());
    
       Sleep(5000);
       while(1)
       {                                    
    	  	Beep(500,1000);
          Sleep(500);
       }
    
       return 1;
    }
    

    PS: Danke für deinen Vorschlag vorher!

    //EDIT:

    Tschultige das ich nochmal störe!

    Jetzt habe ich das Problem nicht mehr piepst(Dienst beep ist aber gestartet)

    Am Nachmittag hats noch geklappt, aber nach Neustarten des Computers nichts mehr...

    Woran kann das liegen?

    mfg



  • Hier hab ich gezeigt, wie man system() auf Windows nachbauen kann:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-227972-and-start-is-10.html

    Ich denke das löst dein Problem.



  • flamer schrieb:

    Hier hab ich gezeigt, wie man system() auf Windows nachbauen kann:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-227972-and-start-is-10.html

    Ich denke das löst dein Problem.

    Ist OK, ich probiers mal aus, aber am stecken bleiben liegt es nicht, da der Befehl "start..." sofort wieder beendet wird und das Programm offen bleibt.

    Mein Problem ist "Beep", denn es bleibt leise.

    Und wenn ich den String mit name.c_str() deiner Funktion system_ übergebe mekert er, dass es const char* ist und nicht char*...

    Was kann man da machen?

    mfg



  • Mein Problem ist "Beep", denn es bleibt leise.

    Das finde ich komisch.
    Versuch einmal, das Zeichen '\a' auszugeben, sollte piepen.
    Wenn nicht ist nämlich der Lautsprecher kapput/im Bios verpfuscht/whatever.



  • http://msdn.microsoft.com/en-us/library/ms679277(VS.85).aspx
    Da steht auch noch was über den Rückgabewert von Beep(), der
    kann Fehler anzeigen. Am besten auch noch GetLastError() aufrufen,
    beide Werte bitte posten. Dann kriegen wir das hin, wenn der Lautsprecher
    noch geht.



  • flamer schrieb:

    Mein Problem ist "Beep", denn es bleibt leise.

    Das finde ich komisch.
    Versuch einmal, das Zeichen '\a' auszugeben, sollte piepen.
    Wenn nicht ist nämlich der Lautsprecher kapput/im Bios verpfuscht/whatever.

    Habe ich am Anfang so gemacht, aber in meinem Quellcode ist die Funktion FreeConsole() drin, um die Konsole zu verstecken, und wenn ich ein printf machen will muss ich sie erst wieder mit AllocConsole() wieder her holen.

    Und nur wegen

    FreeConsole();
    ...
    AllocConsole();
    printf("\a");
    FreeConsole();
    ...
    

    Und das vielleicht ein paar mal, dass muss doch leichter gehen.

    Wie ist das jetzt mit dem String den ich mit c.str() zu einer const char* mache, kann ich den jetzt wieder zu einer char* machen?



  • Die Sache mit dem const sollte nur eine Warnung geben.
    Aber wenn dich die stört, kannst du meinen Code so ändern:

    int __system__(const TCHAR *cmdline)
    

    Das sollte reichen.



  • Habe ich am Anfang so gemacht, aber in meinem Quellcode ist die Funktion FreeConsole() drin, um die Konsole zu verstecken, und wenn ich ein printf machen will muss ich sie erst wieder mit AllocConsole() wieder her holen.

    Verstehe ich.
    Ich frage deshalb so blöd, weil ich schon einmal einen kapput
    gemacht habe, und ewig nicht draufgekommen bin.
    Deshalb: '\a' nur um zu testen, ob's überhaupt noch geht.



  • Ja geht, war nur ne Warnung, hattest Recht.

    Jetzt hab ich mal nur ein Programm gemacht, was nur Beep macht und auch das war leise.

    Hab mit "net stop beep" probiert den Dienst neu zu starten, aber es kam nur die Fehlermeldung "nicht kontrollierbar". Kannst sehen durch "net helpmsg 2189"

    Und mit "net start beep" kommt, das is schon gestartet.

    //EDIT:

    Hab jetzt im Geräte Manager geschaut unter Nicht-PNP-Geräte und habe Beep gefunden.
    Status: Wird beendet!!!

    Hat sich warscheinlich beim Versuch sich zu beenden aufgehängt, werde neu starten und haffen das es wieder geht!



  • Ja hattest recht.

    Mit \a hats gemacht und nach einen Neustart hat auch wieder Beep() funktioniert.

    Vielen Dank flamer für deine hilfreiche Posts.

    Kann geclosed werden.



  • ansi c yeah!

    not


Anmelden zum Antworten