Wie kann man andere Programme mit SHELLEXECUTE starten?

Mit der Funktion ShellExecute können andere Programme oder Dateien und die damit verbundenen Programme gestartet werden. Die Funktion erwartet folgende Parameter:

HWND hwnd Zeiger auf das Elternfenster
LPCTSTR lpop Operationscode:
'open' = öffnet eine Datei
'print' = Druckt die Datei
'explore' = öffnet den Ordner
LPCTSTR file Zeiger auf den Dateinamen oder Ordner
LPCTSTR para Wenn 'file' ein Programm ist, können hier die Kommandozeilenparameter definiert werden
LPCTSTR direc Das ggf. ausgewählte Directory
INT show In welcher Form das Programm gestartet werden soll
SW_HIDE = Fenster versteckt
SW_SHOWNORMAL = Fenster normal anzeigen

Beispiele (Dabei wird davon ausgegangen, dass die Anwendung die die Funktion aufruft "MeineAnwendung" heisst:

Das folgende Beispiel öffnet eine HTML Datei (MeineHTMLDatei.html)

int aus=(int)ShellExecute(MeinFormular->Handle,"open","MeineHTMLDatei.html",NULL,NULL,SW_SHOWNORMAL);
if(aus<=32)
	Application->MessageBox("Browser nicht installiert","HTML-Datei starten",MB_APPLMODAL|MB_ICONSTOP|MB_OK);

Das folgende Beispiel öffnet das Programm TEST.EXE und übergibt als Parameter den Wert "parameter1":

int aus=(int)ShellExecute(MeinFormular->Handle,0,"TEST.EXE","parameter1",0,SW_SHOWNORMAL);
if(aus<=32)
	Application->MessageBox("Fehler bei Ausführung des Progammes","Programm starten",MB_APPLMODAL|MB_ICONSTOP|MB_OK);

In der Regel liegen Dateinnamen u.a. als ANSI-String vor. Die Funktion erwartet jedoch Zeiger auf Strings. Dazu kann die Methode c_str() genutzt werden.

Beispiel:

String datei="MeineHTMLDatei.html";
int aus=(int)ShellExecute(MeinFormular->Handle,"open",datei.c_str(),NULL,NULL,SW_SHOWNORMAL);
if(aus<=32)
	Application->MessageBox("Browser nicht installiert","HTML-Datei starten",MB_APPLMODAL|MB_ICONSTOP|MB_OK);

Siehe auch Wie startet man ein Programm mit CREATE PROCESS?

Zur Übersicht