ShellExecuteAndWait ist schon der richtige Ansatz.
Wenn Du den Standarddrucker änderst, dann print aufrufst und nicht abwartest, bis print abgeschlossen ist, dann ist die Wahrscheinlichkeit sehr hoch, dass das zurücksetzen des Standarddruckers in deiner Anwendung noch vor dem Druck des Dokuments erfolgt, und du somit nix erreicht hast.
Wie hast Du denn ShellExecuteAndWait aufgerufen???