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 ohne Taskdialog (https://www.delphipraxis.net/89881-shutdown-verhindern-ohne-taskdialog.html)

Andreas L. 7. Apr 2007 21:46


Shutdown verhindern ohne Taskdialog
 
Hi,
ich fange die Nachricht WMQueryEndSession ab um noch ein paar Aufgaben vor dem Herunterfahren zu erledigen. In diesem Test nur um die Bildschirmauflösung zu ändern um ein schönes Bildchen anzuzeigen ;-)

Delphi-Quellcode:
procedure TForm1.WMQueryEndSession;
  begin
    Msg.Result := 0;

    ChangeResolution(640, 480, 32);

    Show;

    sleep(5000);

    ChangeResolution(1280, 1024, 32);

    Hide;

    Msg.Result := 1;
  end;
Leider wird meine Form von einem Taskdialog, ihr wisst schon, diese "programm lässt sich nicht beenden" dialoge. Wie kann ich verhindern das so ein Dialog angezeigt wird?

Nächtliche Grüße,
Andy

Relicted 7. Apr 2007 21:50

Re: Shutdown verhindern ohne Taskdialog
 
das problem ist dass die message erst nach ende der prozedur "verändert" wird.

Delphi-Quellcode:
const
  UM_Blubb = WM_User + 1;

procedure TForm1.WMQueryEndSession;
begin
  // Abbrechen des herunterfahrens
  Msg.Result := 0;
  // Sich selber ne nachricht schicken
  PostMessage( self.handle, UM_Blubb,0,0 );
end;

procedure TForm1.UMBlubb;
begin
  ChangeResolution(640, 480, 32);
  Show;
  sleep(5000);
  ChangeResolution(1280, 1024, 32);
  Hide;

//    Msg.Result := 1;
// Windows herunterfahren... hab ich grad ned da wie genau
end;
sollte funktionieren...

gruß
reli

// Edit: nen "M" vergessen .. pardon :-)

Andreas L. 7. Apr 2007 22:16

Re: Shutdown verhindern ohne Taskdialog
 
Habs jetzt so gelöst:
Delphi-Quellcode:
var
 Done: Boolean;

 ...
 ...

procedure TForm1.WMQueryEndSession;
  begin

  if not Done then
   begin

    Msg.Result := 0;

   end
  else
   begin

    Msg.Result := 1;

   end;

  end;

procedure TForm1.FormPaint(Sender: TObject);
begin

 Hide;
 Done := False;

end;

procedure TForm1.WMEndSession;
begin

 ChangeResolution(640, 480, 32);
 Show;
 sleep(5000);
 ChangeResolution(1280, 1024, 32);
 Hide;
 Done := True;
 ExitWin(EWX_REBOOT);
 
end;
Da beim Aufruf von ExitWin(EWX_REBOOT) die Message WMQueryEndSession erneut gesendet wird, verwende ich eine globale Variable vom Typ Boolean um festzustellen ob die Aktion bereits durchgeführt wurde.

Relicted 7. Apr 2007 22:17

Re: Shutdown verhindern ohne Taskdialog
 
jo klar hatte ich vergessen.. sonst hängst in ner endlosschleife...

Andreas L. 7. Apr 2007 22:26

Re: Shutdown verhindern ohne Taskdialog
 
Nachdem Aufruf von ExitWin(...) sollte auch noch ein Application.Terminate; folgen da sonst der "Anwendung lässt sich nicht beenden"-Dialog trotzdem für ein paar Milisekunden erscheint. Jedoch kommt dieser Dialog diesmal erst nachdem die Aktionen durchgeführt wurden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 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