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 Windows herunterfahren kann Prg. im Tray nicht beenden. (https://www.delphipraxis.net/56972-windows-herunterfahren-kann-prg-im-tray-nicht-beenden.html)

Garby 14. Nov 2005 14:31


Windows herunterfahren kann Prg. im Tray nicht beenden.
 
Hallo,

meine Anwendung soll nur im Tray sichtbar sein und daher kein Hauptfenster haben.
Ich habe das wie Hier beschrieben gelöst.
Delphi-Quellcode:
Application.Initialize;
  Application.Run;
  repeat
    Application.HandleMessage;
  until Application.Terminated;
Jetzt habe ich das Problem, dass das Programm beim Herunterfahren von Windows manchmal nicht beendet wird. Das geht sogar soweit, dass Windows nicht herunterfährt.

Wird vielleicht eine Message nicht korrekt verarbeitet oder was kann der Grund dafür sein?

Danke im Voraus.

dahead 14. Nov 2005 14:36

Re: Windows herunterfahren kann Prg. im Tray nicht beenden.
 
Hier und hier könntest du eine Antwort auf deine Frage finden.

mumu 14. Nov 2005 14:37

Re: Windows herunterfahren kann Prg. im Tray nicht beenden.
 
Verarbeite mal diese Message WM_QueryEndSession

Garby 14. Nov 2005 14:54

Re: Windows herunterfahren kann Prg. im Tray nicht beenden.
 
Hallo,

Diese Messages werden in TApplication.WndProc ja schon behandelt und zwar so:
Delphi-Quellcode:
        WM_ENDSESSION:
          if TWMEndSession(Message).EndSession then
          begin
            CallTerminateProcs;
            Halt;
          end;
        WM_QUERYENDSESSION:
          Message.Result := 1;
Ich kann diese Messages ja auch nur in TApplication verarbeiten, weil ich kein Hauptformular habe (Application.Mainform = nil).
Kann ich sonst noch was probieren?

shmia 14. Nov 2005 17:45

Re: Windows herunterfahren kann Prg. im Tray nicht beenden.
 
Führt deine Anwendung Aufgaben durch, die längere Zeit (> 2s) in Anspruch nehmen ?
Dann sollte eine Prüfung auf Application.Terminated enthalten sein:
Delphi-Quellcode:
// das könnte sehr lange dauern:
for i:=1 to 99999999 do
begin
   CalculatePrimTeiler(i);
   if (i mod 10) = 0 then
   begin
      Application.ProcessMessages; // Botschaften behandeln
      if Application.Terminated then
         Exit; // Programm ist eigentlich schon ein "Zombie"; schnell raus hier
   end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz