Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi [Shutdown] - Verhindern, dass Windows es "abschießt" (https://www.delphipraxis.net/94281-%5Bshutdown%5D-verhindern-dass-windows-es-abschiesst.html)

xZise 19. Jun 2007 10:12


[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?

Dezipaitor 19. Jun 2007 10:15

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.

xaromz 19. Jun 2007 10:17

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

CCRDude 19. Jun 2007 10:27

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.

xZise 19. Jun 2007 11:34

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.

SirThornberry 19. Jun 2007 12:37

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.

CCRDude 19. Jun 2007 12:41

Re: [Shutdown] - Verhindern, dass Windows es "abschießt
 
Wobei xaromz ja schon sagte, daß das unter Vista nicht mehr möglich ist?

SirThornberry 19. Jun 2007 12:44

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?

CCRDude 19. Jun 2007 12:47

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.

delphin06 19. Jun 2007 13:21

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.

xZise 19. Jun 2007 13:42

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 ;)

pertzschc 19. Jun 2007 13:51

Re: [Shutdown] - Verhindern, dass Windows es "abschießt
 
Zitat:

Zitat von xZise
Aber ich wills ja net abbrechen sondern nur "hinauszögern" ohne das gleich die Meldung kommt. Es handelt sich hier um Schulcomputer...

Was willst Du eigentlich machen, was länger als sagen wir mal 30 sec. dauert?

Gruß,
Christoph

kalmi01 19. Jun 2007 13:58

Re: [Shutdown] - Verhindern, dass Windows es "abschießt
 
Zitat:

Zitat von xZise
Aber ich wills ja net abbrechen sondern nur "hinauszögern" ohne das gleich die Meldung kommt.

Dann hilft Dir sicher dies:
Delphi-Quellcode:
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;
Im implementation-Teil dann noch:
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