Schreib Dir ein kleines Programm ohne sichtbares Fenster, reagiere auf die Message "WM_QUERYENDSESSION", setze die Lautstärke herab oder mach sonstwas. Im Messagehandler musst Du auf die Message reagieren (result auf TRUE/1) setzen.
Hab ich gemacht. Das funktioniert auch in ein paar Tests. Es ist aber irgendwie nur eine Notlösung, da hierbei nur der konkrete Fall mit dem Runtersetzen der Lautstärke zum Erfolg führt. Es ist auch bei Result := True schön zu sehen, wie rund um das eigene Programm alle anderen beendet werden: Alle sichtbaren Fenster werden geschlossen, und im Systray macht es plop, plop, plop und ein Programm nach dem aderen verschwindet. Unter anderem auch das Antiviren-Programm.
Deshalb Notlösung, weil das nicht so "sauber" ist. Ein anderes Programm, das etwas länger braucht (z. B. zum Aufräumen in Temp-Ordnern oder das vielleicht noch eine kleine Sicherung der wichtigsten Daten machen soll), untergräbt die Sicherheitsmaßnahmen. Vielleicht kann es auch garnicht richtig laufen, weil schon Dienste und Programme beendet sind, die es braucht.
Wie gesagt, ich kann den Umfang nicht einschätzen, aber es wäre eine Notlösung.
Ich verweise nochmal vorsichtig auf meinen Tipp weiter oben - Winlogon-DLLs sind einfach erstellt, und haben den Vorteil, daß sie nicht von Windows beendet werden, wie Windows halt so versucht, Programme beim Herunterfahren zu beenden.
Das habe ich nicht vergessen.
Aber offen gesagt, wird mir der Aufwand langsam zu hoch. Zu dieser Lösung habe ich keine Code-Beispiele, und ich habe bisher nur vielleicht 3 oder 4 DLLs programmiert. Ich müsste also praktisch bei Null anfangen und ebenso wie beim Thema
"Winlogon Notification Packages", das du freundlicherweise verlinkt hast.
Wenn du ein Code-Beispiel oder einen Link hast, und / oder mir was sagen kannst über die Abläufe und Wirkungen dieser Lösung (z. B. ob da andere Progs beendet werden, wie bei QUERYENDSESSION), könnte ich den Aufwand vielleicht ein wenig überblicken.
Guido.