ShellExecute ist ja eine Funktion, da kannst Du also direkt nach dem Aufruf den Rückgabewert abgreifen. Zu ShellExecuteEx und Warten kannst Du Dir
das hier einmal anschauen. Ich bin gerade nicht sicher, aber das Programm müsste während des Wartens einfrieren, dem lässt sich aber mit den "üblichen" Mechanismen entgegenwirken (ProcessMessages, Threads etc.). Bei den Parametern verstehe ich im Moment nicht, was genau Du meinst.