Ich möchte aber aus diversen Gründen die Fenster direkt und ohne MessageQueue schließen.
Alles was du in einer Single-Thread-Anwendung machst, ist am Ende das Abarbeiten von Nachrichten aus der MessageQueue.
Je nachdem welcher Dialog intern aufgerufen wird, hast du gar keine andere Wahl als eine Message an das Fenster zu senden. So wird z.B. bei Verwendung der alten Dialoge der Aufruf von MessageDlg in einem ShowModal landen - genauer in einer solchen Schleife:
Delphi-Quellcode:
repeat
Application.HandleMessage;
if Application.Terminated then ModalResult := mrCancel else
if ModalResult <> 0 then CloseModal;
until ModalResult <> 0;
Du kannst allenfalls der Form-Instanz einen passenden ModalResult mitgeben. Allerdings wird das nichts, wenn die neuen Vista-und-höher-Dialoge aufgerufen werden - da gibt es keine Form-Instanz. Die MessageQueue ist hier die einzig sinnvolle Möglichkeit.