![]() |
Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?
Abstrakt: Wie kann man ein Programm beim Abmelden, Runterfahren, Neustarten von Windows ausführen? (Also sowas wie das Gegenstück zum Autostart-Ordner.)
Konkret: Ich höre z. B. Musik am PC, oder schaue mir ein Video an, und drehe die Lautstärke hoch. Ist der Film vorbei, die Musik aus, vergesse ich regelmäßig (altersbedingt?), dass die Lautstärke noch hoch ist. Was jetzt kommt ist klar: Beim Runterfahren kommt man in den Genuss des Windows-Abmeldesounds in ungeanter Lautstärke, und im Worst-Case noch gratis einen Herz-Kasper dazu. Und wie heißt es so schön in den Verkaufssendungen: "Und das ist längst noch nicht alles!" Denn hat man bei Runterfahren mit einem recht kurzen Sound noch Glück gehabt, gibts den nächsten Herzschrittmacher-Kill beim morgentlichen Hochfahren. Bei mir kommt da nämlich nicht nur der XP-Anmedlesound (ja, ich benutz noch XP :oops: ), sondern es startet gerade dann das tägliche Backup, das mit Sound eingeläutet wird, ebenso meldet sich lautstark mein Reminder für Termine und mein freundliches eMail-Programm schreit mir sanft "Sie haben Post!" um die Ohren. :shock: :roteyes: Problem: A) Es soll beim Beenden von Windows (Abmelden, Runterfahren, usw.) ein Programm ausgeführt werden, das die Lautstärke (Master-Volume) auf einen gewünschten Wert runterstellt (NICHT Mute, also größer 0 ). B) Das Programm soll möglichst mit einer Installations-Routine installiert werden können, z. B. Doppelklick -> ein paarmal "Weiter" -> und "Fertig". :wink: (Kurzer Begründung: Zu meinen Sicherheitsvorkehrungen gehört das Restaurieren des Systems (per Ghost-Image) alle 4 - 6 Wochen, und die hier gesuchte Lösung soll erst dann in das Image, wenn ich es ausgiebig getestet habe.) Lösung bisher: Das einfachste war, ein (fertiges) Programm zu finden, mit dem sich die Lautstärke auf einen gewünschten Wert einstellen lässt: Das winzige Command Line Tool ![]() Dann wurde es schwierig: Ein Programm finden, das andere Programme ausführt, wenn der PC runtergefahren wird. Es gibt zwar ein paar wenige Programme, die sind aber nicht wirklich zu gebrauchen. Entweder kommerziell, oder mit Nag-Ware. Group Policies: Ich habe mehrere Tage recherchiert (natürlich nicht 24 Stds) und alle Lösungen führten immer wieder zu den Windows Group Policies. Das habe ich umgesetzt, und es funktioniert in soweit, dass das Problem A (siehe oben) gelöst wird. Aber bei Problem B (einfache Installierbarkeit) bin ich gescheitert. Gesuchte Hilfe: Wie kann ich eine Lösung programmieren, die mir entweder die Einstellungen der Group Policies vornimmt (bin gescheitert an der Win SID u. ä.), oder eine komplette Delphi-Lösung ohne Group Policies, mit der ich NirCmd beim Beenden von Windows aufrufen kann? Guido. Edit: Bezug zur Themen-Überschrift eingefügt. |
AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?
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.
|
AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?
Das Problem lässt sich also darauf reduzieren, dass der Installer die Groupe Policy automatisch einrichten soll.
|
AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?
Zitat:
![]() Wie man sehen kann, ist mein Einleitungs-Posting so schon recht lang. (Zum Glück lesen Programmierer gerne :-D ) Da wollte ich nicht auch noch alles überfluten mit "ich hab schon dies und das und das andere auch noch probiert". Zuerst hoffte ich, eine Diskusion in Gange zu kriegen. Dein Beitrag hilft dabei. *freu* Allerdings befürchte ich bei diesem Ansatz, dass er einen Overhead, (Wikipedia: evtl. entbehrlichen Mehraufwand, der nicht direkt Nutzen erzeugt) nach sich zieht, der sich bei dieser simplen Aufgabe (Lautstärke rückstellen beim Shutdown) nicht "rechnet". Zum Beispiel ist dabei nicht gewährleistet, dass so ein Programm ausgeführt wird, bevor der Abmeldesound ertönt. Oder Beispiel 2, könnten schon Dienste oder gar der Explorer beendet sein, so dass das Programm zum einen seine Funktion nicht ausführen kann, oder zum anderen das Runterfahren blockiert und der PC hängen bleibt. Usw. Ich habe gehofft, das in dieser Diskussion auch die ein oder andere Information auftaucht, die solche ungewollten Seiteneffekte aufzeigt, denn ich bin nicht mit alle Abläufe beim Shutdown vertraut. Ich behalt die Lösung aber im Hinterkopf. :-D Zitat:
Hallo Michael, freue mich, nach langer Zeit wieder was von "alten Bekannten" zu hören. :-D War lange Zeit nicht hier. Zum Thema: Du hast den Nagel auf den Kopf getroffen! Nach den schon erwähnten Recherchen habe ich den Eindruck, dass die quasi Windows-eigene Möglichkeit mit den Group Policies die sauberste Lösung ist; zumindest was das korrekte Ausführen (m)eines Programms und das anschliesende Runterfahren von Windows betrifft. Bei meinen Tests habe ich sogar problemlos mit einer Wait-Routine arbeiten können. Das heißt, das per Group Policies aufgerufene Test-Programm hatte ein Fenster und die Ausführung des Group Policy Scripts (und somit das Shutdown) wurde pausiert, bis ich das Fenster geschlossen habe. Es wurde zu eine Zeitpunkt ausgeführt, der vor den Windows-Shutdown-Abläufen liegt: Abmeldesound wurde erst nach meinem Test-Programm abgespielt, und es wurden keine Dienste oder Programme beendet, bevor ich das Programm geschlossen habe (reproduzierbar). Sorry, das war schon wieder lang. Deshalb kurz: Ja, das Problem lässt sich darauf reduzieren, dass der Installer die Groupe Policy automatisch einrichten soll. Damit wär ich zufrieden. :-D Das bin ich auch schon angegangen, hab auch (wahrscheinlich) alle relevanten Registry-Schlüssel rausgefunden. Dann habe ich aber abgebrochen, als mir die SID Kopfzerbrechen bereitete und ich nicht sicher war, ob alle benötigten MMC-Module dadurch geladen werden, usw. Das sah wieder nach einem Overhead aus, den ich nicht beurteilen konnte. Deshalb erst mal mit euch kurzschließen, was ihr so meint. Guido. Edit: Kleine Ergänzungen. |
AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?
Da müsste sich eigentlich was mit dem WindowsScriptingHhost oder Powershell oder wie das heißt machen lassen. Ein Windows Server Admin müsste sich da auskennen. Hast du mal in entsprechenden Foren geguckt oder gefragt? Das Script könnte man ja dann vom Installer ausführen lassen. Bedenke aber, dass ab Vista Windows Programme gnadenlos abwürgte die das Runterfahren zu lange verzögern.
|
AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?
Auch nicht simpel, aber machbar: WinLogon. Eine entspreche DLL schreiben, die einen Export names ShutdownHandler hat (bzw. auch LogoffHandler), im entry point DisableThreadLibraryCalls nicht vergessen, und das ganze noch
![]() |
AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?
Zitat:
Zitat:
Zitat:
Wenn ich halt wüsste, wie groß der Aufwand ist, und ob es wirklich eine andere, einfachere Möglichkeit gibt, wäre mich schon geholfen. Gewünscht ist halt eine Möglichkeit, die mehr oder weniger auf alle aktuellen Win-Versionen anwendbar ist. Wenn ich's nur für mich lösen wollte, würd ich die Registry-Schlüssel hardcoden und gut iss. (Würde meinen Prinzipien widersprechen.) Aber noch geb ich die Hoffnung nicht auf, eine "ordentliche" Lösung zu finden. :wink: Guido. |
AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?
Eine generelle Lösung wird es nicht geben, da sich ab Windows Vista das Soundmanagement grundsätzlich geändert hat. Siehe dazu auch:
![]() |
AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?
Zitat:
mache doch einen "Zwitterlösung". Du erzeugst in der GPO (Gruppenrichtlinie) einen Eintrag das beim Herunterfahre eine .CMD oder .BAT ausgeführt wird. Diese .BAT lässt Du einfach leer. Jetzt machst Du dein Image. Dein "Installer" muss jetzt eigentlich nur noch Dein Programm in einen Ordner legen und die .BAT ändern oder ersetzen. |
AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?
Zitat:
![]() Zitat:
Aber das Skript und die dll haben zusammen 25 kB - also total wenig Overhead :stupid: (.net ist hoffentlich schon im RAM ....) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz