externe Programme aufrufen
-
Hi!
Schönen Dank, das hilft mir schon mal weiter. Ist es denn auch möglich diese Befehle direkt im C-Programm auszuführen?
Damit sich der Endnutzer des Programms nicht noch mit GNUPLOT auseinandersetzten muß, würde ich gerne die nötigen Befehle in GNUPLOT in mein C-Programm schreiben, so daß am Ende nur die Graphische Ausgabe ausgegeben wird.
Aufs DOS-Problem bezogen: Ich rufe im Quellcode mit system("command.com") die DOS-Oberfläche auf, kopiere eine Datei in ein anderes Verzeichnis und schliesse die DOS-Oberfläche wieder. Das alles im C-Programm, im Prinzip ohne daß der Benutzer etwas davon mitbekommt.be
-
Also auf DOS bzw. Konsole bezogen kannst du dir das Aufrufen von command.com sparen und gleich deinen Befehl mit system() abschicken, z. B. system("PAUSE") oder auf deinen Fall bezogen system("COPY a.dat b.dat"). Wobei man sowas eigentlich vermeiden sollte, da es direkt programmiert um vieles schneller und sauberer ist.
Leider kenn ich mich mit GNUPLOT nicht aus, darum kann ich dir leider nicht sagen, ob du da auch so einfach deine Befehle angeben kannst. system() führt ja eigentlich nur ausführbare Dateien (.EXE, .COM, .BAT, ...) oder eingebaute Funktionen in der command.com (auf DOS und Win32-Konsole bezogen) aus.
-
ich würde einfach zwei streams öffnen und die datei byte für byte kopieren...
falls du ein programm starten willst, kannst du _spawn benutzen (process.h)
(msdn: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt__spawn.2c_._wspawn_functions.asp)
-
Sorry, dass ich hier meine Frage reinposte aber ich habe ein ähnliches Problem.
Ich möchte aus meinem Programm den MediaPlayer mit einem MP3-Lied als Paramtere aufrufen. Allerdings führt system den Befehl nur bis zum ersten Leerzeichen aus. Gibt es vielleicht eine Möglichkeit diese mit zu übertragen.
Beispiel:
system("\"C:\\windows\\Media Player\\mplayer.exe G:\\MP3\\lied.mp3\"") ;
Dann bekomme etwa solch eine Ausgabe:
"Befehl oder Datei "C:\windows\Media" nicht gefundenOder gibt es vielleicht auch die Möglichkeit die MP3-Datei mit dem standardmäßig unter Windows verknüpften Programm zu öffnen?
-
1. der media player ist kein optimaler player
ansonsten musst du den anwendungspfad und den dfateipfad getrennt in anführunsstriche setzen:system("\"C:\\windows\\Media Player\\mplayer.exe\" \"G:\\MP3\\lied.mp3\"") ;
-
So wie sich das für mich darstellt willst du ein Frontend o.ä. schreiben. Da du die Rückgabe des augerufenen Programs brauchst ist system() nicht die ideale wahl. Es is OS-Abhängig wie du das lösst bzw. mit welchen Funktionen aber der allgemeine Weg ist, pipe erzeugen neuen prozess erzeugen und die Standartausgabe und Eingabe des neuen Prozesses umlenken. Dann kannst du mit dem Prozess kommunizieren. Kannst ja mal nach IPC googlen...
-
@Jarvis
Für dein Problem gibts auch eine WinAPI-Funktion. Leider weiß ich den Namen jetzt nicht auswendig.
-
meinst vielleicht ShellExecute(..)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shellexecute.asp
-
http://www.c-plusplus.net/forum/viewtopic.php?t=39453
unter Unix/Linux/POSIX sollte man lieber die man: execve(2) Funktionen benutzen!
-
@miller_m
Nein, ich meinte eine WinAPI mit der man Multimediadateien abspielen kann. Hab sowas schon mal gesehen. Ich glaub es war auf www.vb-archiv.de. Ist zwar VB-Code, aber die APIs sind die gleichen ;).
-
Ich werde dieses "ShellExecute" mal ausrobieren. Der System() Befehl funktioniert nämlich auch nicht mit 2 paar Anführungsstrichen.
Frauke2k schrieb:
ansonsten musst du den anwendungspfad und den dfateipfad getrennt in anführunsstriche setzen:
system("\"C:\\windows\\Media Player\\mplayer.exe\" \"G:\\MP3\\lied.mp3\"") ;
EDIT:
@AJ: Soweit ich weiß, habe ich noch nie was mit APIs gemacht. Haben das in der Schule noch nicht durchgenommen. Versuche es deshalb erstmal mit dem ShellExecute
-
Gehört nicht einfach nur Media Player in Anführungszeichen??
Wie verhält es sich denn, wenn du das ganze in die Konsole eingibst?
-
Nein, man muss schon den ganzen Pfad in Anführungszeichen packen.
Auf der Konsole klappt alles wunderbar.
-
AJ schrieb:
@miller_m
Nein, ich meinte eine WinAPI mit der man Multimediadateien abspielen kann. Hab sowas schon mal gesehen. Ich glaub es war auf www.vb-archiv.de. Ist zwar VB-Code, aber die APIs sind die gleichen ;).Die Funktion heisst PlaySound() ...