Programm aus Programm starten
-
Hi!
Ich probiers dann wohl mal anders. Danke schön!
-
Ich habe es schon mal geschafft den explorer auf C:\Windows zu starten. Schaffe es aber nicht das batch-File auszuführen. Wieso nicht?
Das funzt:
//CreateProcess(NULL,"J:\Programmieren\comp_hds\BatchFiles\scandrvJ.bat",NULL,NULL,false,NORMAL_PRIORITY_CLASS,NULL,NULL,NULL) ; //execv("J:\\Programmieren\\comp_hds\\scandrvJ.bat",NULL); ShellExecute(NULL, "open", "C:\\Windows\\explorer.exe", 0,0, SW_SHOWDEFAULT); //system("C:\\Windows\\explorer.exe");
Das funktioniert auch:
ShellExecute(NULL, "open", "J:\\Programmieren\\comp_hds\\batchFiles", 0,NULL, SW_SHOWDEFAULT);
Das funktioniert nicht:
ShellExecute(NULL, "open", "J:\\Programmieren\\comp_hds\\batchFiles\\scandrvJ.bat", 0,NULL, SW_SHOWDEFAULT);
Ich weiß nicht warum. Hat irgend jemand eine Ahnung.
-
So sollte es gehen, hab´s aber noch nicht probiert
ShellExecute(NULL,"open","iexplore.exe","---bat-Datei----",NULL, SW_SHOW);
-
mww schrieb:
ShellExecute(NULL,"open","iexplore.exe","---bat-Datei----",NULL, SW_SHOW);
Ist das Feld nicht für Parameter, in das du ---bat-Datei---- geschrieben hast? Ich probiers mal vielleicht klappts.
-
Hi!
Ich habe mal ein bischen rum probiert. Jedes mal, wenn ich mein Programm start und der ShellExecute-Befehl aus geführt wird sind die batch-Files leer. Sobald das Programm beendet ist, sind die Batch-Dateien wieder voll. Ich habe den ShellExecute-Befehl so verwendet:
ShellExecute(NULL, "open","J:\\Programmieren\\comp_hds\\batchFiles", NULL,NULL, SW_SHOWDEFAULT);
Diese Variante funktioniert leider nicht:
mww schrieb:
ShellExecute(NULL,"open","iexplore.exe","---bat-Datei----",NULL, SW_SHOW);
-
-
Hi!
Ich möchte euch erstmal für eure bisherige Mühe danken. Leider habe ich es bisher noch nicht geschafft mein Batch-File zu starten. Hier ein bischen mehr Code:
//CreateProcessA("J:\Programmieren\comp_hds\BatchFiles","cmd scandrvJ.bat",NULL,NULL,false,NORMAL_PRIORITY_CLASS,NULL,NULL,NULL,NULL) ; ShellExecute(NULL, "open","J:\\Programmieren\\comp_hds\\batchFiles\\","//c scandrvJ.bat",NULL, SW_SHOWDEFAULT); cout << "File erstellt"; getch();
Was mache ich den falsch? Gibt es vielleicht eine einfachere bessere Möglichkeit außer system()?
-
Zum zweiten Mal:
http://www.c-plusplus.net/forum/viewtopic.php?t=52810&highlight=bat+shellexecute
Anklicken, lesen und verstehen!
-
Hi!
Habs jetzt mir System gemacht. Wenn mann das programm explizit in kleinen Schritte zur datei navigiert dann klappt das auch. Sieht jetzt so aus, wenn es interessiert:
system("J:"); system("J:\\programmieren\\comp_hds\\batchFiles\\scandrvJ.bat");
Danke für eure Mühe. Vielleicht finde ich ja irgendwann mal einen anderen Weg, aber mit ShellExecute komme ich nicht klar.
Ciao,
Christoph
-
Funktioniert denn
ShellExecute(NULL, "open", "cmd", "/c \"J:\\programmieren\\comp_hds\\batchFiles\\scandrvJ.bat\"", NULL, SW_SHOWDEFAULT);
wirklich nicht?
Wenn nein, welchen Wert liefert ShellExecute denn zurück? Kann dieser zurückgegebene Wert auf einen Fehler hindeuten?
/Edit: Hab das bei mir grad gestestet (Win2000), funktioniert wunderbar so...
-
Hi!
Ich habe es jetzt mal so reingeschrieben:
ShellExecute(nSuccess, "open","cmd","/c \"J:\\Programmieren\\comp_hds\\batchFiles\\scandrvJ.bat\"", NULL, SW_SHOWNORMAL); cout << nSuccess << "\n";
Mein Programm gibt 000000 aus. Was bedeutet das jetzt? Mein Programm macht aber eine neue Konsole auf, dessen Prompt auf meine hinterste Partition zeigt.
-
MrFryze schrieb:
Mein Programm gibt 000000 aus. Was bedeutet das jetzt?
deine nSuccess (wi auch immer du auf diesen trichter kommst) ist ein fensterhandle und kein rückgabewert.
lies dir doch mal aufmerksam den link durch
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shellexecute.aspMrFryze schrieb:
Mein Programm macht aber eine neue Konsole auf, dessen Prompt auf meine hinterste Partition zeigt.
kann doch sein. denn keiner hier weis was in "scandrvJ.bat" steht.
-
Das, was Du da "nSuccess" genannt hast, ist eigentlich ein Handle auf ein Fenster, was Du bereitstellen solltest, sofern Du an MessageBoxen des zu startenden Programmes interessiert bist...
Wenn Du da nichts reinschreibst, ist klar das er 00000 als nSuccess ausgibt...
-
Wie kann man denn überhaupt auf sowas wirsches kommen?
-
Sorry.
Dummheit oder Unwissenheit, kommt aufs gleiche raus.
Kann ich es so machen? Liefert jetzt die 2.ShellExecute(NULL,"open","cmd ","/c \"J:\\Programmieren\\comp_hds\\batchFiles\\scandrvE.bat\"",NULL,SW_SHOWDEFAULT); error = GetLastError(); cout << error << "\n";
-
MrFryze schrieb:
Sorry. Wie bekomme ich den raus, welchen Wert diese Funktion zurück liefert?
int func() { return 5; } int i = func(...);
somit müsste in "i" 5 stehen.
MrFryze schrieb:
Ich habe nicht wirklich verstanden wofür das Feld da sein könnte und CreateProcess sowas kann dachte ich, dass es eine ähnliche Funktion seine könnte.
denken != wissen
nimm es mir nicht krum aber bevor du irgendwas weiter programmierst kauf dir erst mal ein buch oder lies ein paar tutorials.
-
Hey, super Tipp. Ich glaube um alles nachschlagen zu können brauche ich ein Bibliotek. Ich mag Lerning by doing viel lieber.
-
MrFryze schrieb:
Hey, super Tipp. Ich glaube um alles nachschlagen zu können brauche ich ein Bibliotek. Ich mag Lerning by doing viel lieber.
die bibliothok für winapi http://msdn.microsoft.com/library/
die meisten bücher und tutorials sind "Lerning by doing" und vermutlich wirst
beim programmieren nicht sehr weit kommen.
-
MrFryze schrieb:
Hey, super Tipp. Ich glaube um alles nachschlagen zu können brauche ich ein Bibliotek.
Das ist Quatsch!
MrFryze schrieb:
Ich mag Lerning by doing viel lieber.
Wir auch.
Wenn der Gegenüber sich Mühe gibt und zumindest die Grundlagen kennt.
Jedes Tutorial, jedes Buch, was man autodidaktisch (=alleine) durcharbeitet, ist "Learning by doing"!Sorry, aber eine Frage wie "Wie bekomme ich den raus, welchen Wert diese Funktion zurück liefert?" gehört nicht in ein WinAPI-Forum, sonder wird einem in jeder 2. oder 3. Lektion von C/C++-Tutorials beigebracht!
Dir fehlt schlichtweg Grundlagenwissen, ohne das Du kein Windows-Programm programmieren solltest!
Das, was Du da durch "Learning by doing" Dir selber beibringst wird sich später bitterlich an Dir rächen (durch absolut schlechten Programmierstil und lückenhaftes Wissen (wie sich ja jetzt schon zeigt)).
-
Die Frage,"Sorry. Wie bekomme ich den raus, welchen Wert diese Funktion zurück liefert?", war ein wenig vor eilig. Habs ja jetzt, zwar nur mit eurer Hilfe, rausgefunden. Mir war auch am Anfang nicht bewusst, dass ich die WINAPI brauchen würde.
Ich versuche mich zu verbessern. Danke schön. Bin auch schon von Errorcode 2 auf 32 gewechselt.