Ich hab mir aufgrund Deiner Frage mal selber ein kleines Programm gemacht, was genau das tut und ich bin schwer erschocken.
Kurze Erklärung:
Suche mit Findwindow() die Fenster (nach den Titeln aussortieren)
Wenn Du mit GetNextWindow() mal alle Fenster durchwanderst, wirst Du sehen, daß wesentlich mehr Fenster existieren (manche sogar mehrfach, wenn sie dem gleichen Prozess zugeordnet sind!). Mir ist allerdings aufgefallen, daß es sehr viele gibt, welche nicht im Taskmanager oder anderen Prozess-Explorern angezeigt werden (dringender Verdacht auf interne Spyware etc.).
Hol Dir von jedem Fenster mit GetParent() den obersten Besitzer falls vorhanden und Schicke diesem die Messages: WM_CLOSE & WM_QUIT.
Das sollte schon ausreichen. Wenn der Mainframe nicht läuft, wird der Prozess normalerweise automatisch mit gekillt. Für Deine aufgezählten Anwendungen ist das jedenfalls ausreichend.
Den Explorer zu killen ist bei WinXP allerdings fatal, weil das System mit diesem verknüpft ist. Meinst Du allerdings den Internet-Explorer, dann ist das auch kein Problem. Sollte allerdings die Funktion aktiviert sein, daß jedes IExplorer-Fenster in einem eigenen Prozess laufen soll, mußt Du die komplette Fensterliste durchwandern und jedes einzeln abschießen - klappt jedenfalls bei mir alles wunderbar.