Es wäre vermutlich einfacher, wenn Du nicht ShellExecute, sondern CreateProcess verwenden würdest. Die PROCESS_INFORMATION-Struktur, deren Adresse Du als letzten Parameter übergibst, enthält u.a. ein HANDLE, auf das Du mit WaitForSingleObject warten kannst, bis der Prozess beendet ist:
STARTUPINFO sinfo;
PROCESS_INFORMATION pinfo;
memset( &sinfo, 0, sizeof(sinfo) );
sinfo.cb = sizeof(sinfo);
memset( &pinfo, 0, sizeof(pinfo) );
// Taschenrechner starten
if(!CreateProcess("c:\\windows\\system32\\calc.exe", NULL, NULL, NULL, FALSE, NULL, NULL, NULL, &sinfo, &pinfo)) {
// Fehler beim Starten des Prozesses
// ...
}
// Warten, bis der Taschenrechner geschlossen wird
WaitForSingleObject( pinfo.hProcess, INFINITE );[/CODE]