Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
vielen Dank für die Info! Die Batch Datei kann ich jetzt aufrufen, das einzige Problem ist, dass sich die cmd.exe sofort wieder schließt. Wie kann ich die cmd.exe offen lassen?
Ich starte das Programm so:
HWND Handle = {"C:\\WINDOWS\\System32\\cmd.exe"};
int aus=(int)ShellExecute(Handle,"open","D:\\hopf.bat" ,NULL,NULL,SW_SHOWNORMAL);
Warum soll die Kommandozeile denn offen bleiben, soll der Anwender noch irgendwelche Sachen eingeben?<p>
Kannst Du mir kurz erklären, was der Befehl macht:<br>
<i>HWND Handle = {"C:\\WINDOWS\\System32\\cmd.exe"}</i><p>
Schöne Grüße, Mario Noac
Hi,
ich glaube, Du hast da ein Parameter vertauscht:
das Handle sollte das Handle des Fensters sein, dass die batch-Datei aufruft, also z.B. HWND(this) bzw. HWND(Form1) oder wie auch immer das Fenster der Hauptanwendung heißt.
<PRE>
HWND Handle = {"c:\windows..usw."};
</PRE>
Die Blockklammern sind überflüssig, und dann gibt Handle wohl den Zeiger auf das Zeichenarray für den String "c:\windows..." zruück. Der hat in der ShellExecute Anweisung natürlich nix zu suchen ;-)
cmd wird beim Aufruf der Batch-Datei wahrscheinlich automatisch als Befehlsinterpreter gestartet.
zu den Paramtern:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shellexecute.asp
Zum Fenster offenlassen:
Entweder du fügst deiner Batch-Datei den Befehl PAUSE hinzu (dh erst nach Tastendruck schließt sich das Fenster) oder du nutzt eine der Optionen der Shell:
http://www.rz.fh-ulm.de/rz/winnt/cmd.htm
Für deinen Fall ist, denke ich, /K der passende.
Also:
<PRE>
HINSTANCE aus = ShellExecute(this, "open", "cmd.exe", " /K d:\\hopf.bat", NULL, SW_SHOWNORMAL);
</PRE>
... im letzteren Fall müsstest Du beachten, dass es unter Win9x die cmd nicht gibt, sondern dort command heißt und vermutlich andere Parameter hat.<p>
Grüße, Mari
Das mit HINSTANCE aus = ShellExecute(this, "open", "cmd.exe", " /K d:\\hopf.bat", NULL, SW_SHOWNORMAL); funktioniert einwandfrei! Die cmd.exe bleibt offen!
Nur eines noch: wie kann ich die cmd.exe dann von meiner Anwendung aus zu einem späteren Zeitpunkt wieder schließen?
Du schließt dann natürlich unter Umständen eine cmd.exe, die der Anwender mutwillig geöffnet hat?! Vermutlich ist dies aber verschmerzbar?<p>
Falls nicht, solltest Du zu CreateProcess wechseln. Hier ein Beispiel aus dem MSSDK:<p>
<pre>void main( VOID )
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
Comment