system(tu was ) problem



  • Hallo,

    ich weiß , das man system("blblblbl"), normal nicht verwenden soll.
    Ich bin absoluter C anfänger, und glaub mal gehört zu haben man soll WinAPi oder so verwenden.

    Mir geht es nur um einen kleinen Büro Gimmick.
    Ich dachte ich komme mit folgendem Code schnell zum erfolg, klappt aber nicht.

    system("test.mp3")
    

    das funktioniert noch, die MP3 wird im WindowsMediaPlayer abgespielt.

    allderdings kann ich die Anwendung nicht mehr schließen

    system("taskkill /im wmplayer.exe")
    

    ... macht leider überhaupt nichts.

    Wenn die MP3 datei nicht geöffnet ist, funktioniert mein Code allerdings.
    Kann mir evtl. jmd. helfen?


  • Mod

    Das geht mit system nicht. system ist ganz doof und einfach. Starte eine neue Shell, führe da drin das Kommando aus, warte bis dieses fertig ist. Da das Kommando nie fertig wird, so lange der Nutzer den Medienplayer nicht schließt, kehrt system auch nicht zurück.
    Vielleicht kennt dein Medienplayer irgendwelche Kommandozeilenargumente, um sich nach dem Abspielen wieder zu beenden? Das wäre dann nicht mehr so schön einfach, wie bloß den Namen der Datei anzugeben. Du müsstest dich in einen bestimmten Medienplayer einlesen und darauf verlassen, dass dieser vorhanden ist und auch tut, was du brauchst.

    Aber die wirklich gute Lösung wäre, wie du schon selbst vermutest, nicht system für diese Aufgabe zu nutzen. system brauchst du praktisch nie.



  • habs jetzt hinbekommen. ist aber wirklich sehr schön.

    Wie kann man sowas "elegant" lösen?



  • system("start blabla.mp3") vielleicht? Das hat mit system aber nicht viel zu tun, sondern mit Windows und seiner CMD-Shell.


  • Mod

    beginner88888 schrieb:

    Wie kann man sowas "elegant" lösen?

    Ich nehme mal an, dir geht es konkret um das Abspielen von Klängen, nicht um das Starten von Unterprozessen. Also nimmst du entweder die Betriebssystemfunktionen zum Abspielen von Klängen oder möglicherweise einfacher, ein Framework für Multimedia, zum Beispiel SDL oder SFML.



  • Also nimmst du entweder die Betriebssystemfunktionen zum Abspielen von Klängen

    Das wäre dann aber "System(...)" oder habe ich dich jetzt falsch verstanden.

    Es gibt wohl keine C Bibliothek , die so sachen wie "Öffne jpg, spiele mp3" unterstützt oder beinhaltet?

    ein Framework für Multimedia, zum Beispiel SDL oder SFML

    ???

    Was ist eigentlich mit der Windows API gemeint?



  • beginner88888 schrieb:

    Was ist eigentlich mit der Windows API gemeint?

    Die API von Windows.
    Eben die WinAPI


  • Mod

    beginner88888 schrieb:

    Also nimmst du entweder die Betriebssystemfunktionen zum Abspielen von Klängen

    Das wäre dann aber "System(...)" oder habe ich dich jetzt falsch verstanden.

    Das ist explizit nicht gemeint.

    Es gibt wohl keine C Bibliothek , die so sachen wie "Öffne jpg, spiele mp3" unterstützt oder beinhaltet?

    Doch! Zum Beispiel SDL, SFML und viele andere mehr. Merke: Du bist nicht der erste, der in C Klänge abspielen möchte oder Bilder anzeigen möchte. Natürlich gibt es Bibliotheken dafür.

    Was ist eigentlich mit der Windows API gemeint?

    Was macht man denn, wenn man einen Begriff nicht versteht?
    Google: Windows API
    War das so schwer?

    Wenn es dir nur darum geht, ein kleines Gimmickprogramm zu schreiben, ohne wirklich C zu lernen, dann frag lieber, ob dir jemand das Programm schreibt. Wenn es wirklich nur ein Gimmick ist, dann wird sich bei freundlicher Nachfrage (und einer guten, genauen, brauchbaren Beschreibung, was das Programm tun soll!) wohl sogar jemand finden, der dir das einfach mal gratis fertig macht.

    Wenn du in C (oder jeder anderen Sprache) Bibliotheken nutzen willst, dann musst du halbwegs wissen, wie die Sprache funktioniert, denn die Bibliotheken nutzen natürlich die Features und üblichen Herangehensweisen der Sprache aus. Ich habe den Eindruck, dass deine C-Kenntnisse noch nicht sehr weit sind.



  • system("taskkill /F /IM wmplayer.exe");
    

    Damit wird der taskkill erzwungen(f = force).
    Zumindest funktioniert das bei mir.



  • Danke für die zahlreichen Antworten.

    Habs jetzt mit den System befehlen hinbekommen. Bzw, mit Win7 ging es auf anhieb so wie ich es vorhatte, mit XP ging es nicht.

    Egal. Läuft. Danke.


Anmelden zum Antworten