![]() |
[Shutdown] - Verhindern, dass Windows es "abschießt&quo
Ich fange die Message WM_QUERYENDSESSION ab und führe da etwas längeres aus.
Aber dann meldet sich Windows, dass das Prog nicht reagiert. Wie kann ich es verhindern? |
Re: [Shutdown] - Verhindern, dass Windows es "abschießt
Du musst die Windowsnachrichtenschleife weiterlaufen lassen. Also auf Nachrichten reagieren.
Probiere Application.ProcessMessages. Unter Vista kann es aber leicht sein, dass dein Programm trotzdem abgeschossen wird. |
Re: [Shutdown] - Verhindern, dass Windows es "abschießt
Hallo,
ab Vista kannst Du das überhaupt nicht mehr verhindern. Nicht nur, dass die Möglichkeit gestrichen wurde, den Neustart zu verhindern, es wurde IMHO auch die Wartezeit, bis ein Programm abgeschossen wird, verkürzt. Gruß xaromz |
Re: [Shutdown] - Verhindern, dass Windows es "abschießt
Kann letzeres nur unterstreichen, "Certified for Vista" fordert zwingend vom Programm, daß es sofort auf WM_QUERYENDSESSION mit LPARAM = ENDSESSION_CLOSEAPP reagiert; WM_ENDSESSION darf nicht länger als 5 Sekunden dauern.
|
Re: [Shutdown] - Verhindern, dass Windows es "abschießt
Also primär soll es nur unter Windows 2000 laufen.
Aber vielleicht gibt es eine andere Möglichkeit: Und zwar soll es, wenn der Benutzter sich abmeldet, alle Daten des Benutzers (C:\Programme und Einstellungen\...) löschen. (Daten werden vorher auf dem Server gesichert) Das Problem ist nur: Wie kann man das hinkriegen ohne das Windows rummeckert? PS: Am besten ist es natürlich, dass es auch funktioniert wenn Windows geupdatet wird. |
Re: [Shutdown] - Verhindern, dass Windows es "abschießt
es würde funktioneren wenn du einfach den herunterfahrenprozess abbrichst und wenn deine aktion fertig ist kannst du das herunterfahren erneut starten.
|
Re: [Shutdown] - Verhindern, dass Windows es "abschießt
Wobei xaromz ja schon sagte, daß das unter Vista nicht mehr möglich ist?
|
Re: [Shutdown] - Verhindern, dass Windows es "abschießt
hmm, dessen bin ich mir nicht ganz sicher. Ist es nur nicht mehr über diese Message möglich oder ist es auch nicht mehr über shutdown -a möglich?
|
Re: [Shutdown] - Verhindern, dass Windows es "abschießt
Ich hatte verstanden, daß das Herunterfahren-Abbrechen nicht mehr möglich ist, nicht das Herunterfahren selber, das geht imho noch.
|
Re: [Shutdown] - Verhindern, dass Windows es "abschießt
wenn man das herunterfahren abbricht zeigt Vista ne Meldung, welches Programm das herzunterfahren behindert. Man hat dann die auswahl zwischen herunterfahren abbrechen und einfach herunterfahren, wobei bei letzterem das programm dann einfach terminiert wird.
Ich hatte das slebe problem mit n programm von mir! Hab das herunterfahren dann abgebrochen in der WMQueryEndSession. Unter Vista kann man dann mit der ShutdownBlockReasonCreate Funktion zusätzlich noch angeben warum das Programm das herunterfahren abbricht. damit der User weiß warum es den shutdown unterbricht. Find ich ganz nützlich. |
Re: [Shutdown] - Verhindern, dass Windows es "abschießt
Aber ich wills ja net abbrechen sondern nur "hinauszögern" ohne das gleich die Meldung kommt. Es handelt sich hier um Schulcomputer und aufgrund des Verhalten der Schüler weiß ich, dass sie sofort die Meldung wegdrücken ("Sofort beenden") ;)
Und bei Vista, welches nicht benutzt wird, aber wer weiß..., wäre das ja noch schlimmer xD Naja... Jetzt funktionierts schonmal soweit, dass man die Ordner automatisch löschen kann ;) |
Re: [Shutdown] - Verhindern, dass Windows es "abschießt
Zitat:
Gruß, Christoph |
Re: [Shutdown] - Verhindern, dass Windows es "abschießt
Zitat:
Delphi-Quellcode:
Im implementation-Teil dann noch:
uses
Windows, Messages, SysUtils, Classes, Forms, Registry, ShellAPI, WinInet; type TForm1 = class(TForm) private procedure CleanDir(SearchDir : string); procedure WMQueryEndSession(var Msg: TMessage); message WM_QUERYENDSESSION; procedure WMEndSession(var Msg: TMessage); message WM_ENDSESSION; end;
Delphi-Quellcode:
procedure TForm1.WMQueryEndSession;
begin Msg.Result := 0; CleanDir; Down := true; Msg.Result := 1; end; procedure TForm1.WMEndSession; begin while not Down do Sleep(100); Msg.Result := 1; Self.Close; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 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