Autor Beitrag
Jojojoxx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: Fr 08.09.06 17:05 
Hallo!

Ich habe eine Sicherheitsabfrage vor dem Schließen meines Programms eingebaut im Ereignis OnCloseQuery. Wenn ich nun den PC Herunterfahre, wird das Programm ja auch geschlossen und dieses Ereignis ausgelöst.
Wie kann ich das verhindern??
Danke euch!

mfg
Jojo


Moderiert von user profile iconGausi: Topic aus VCL (Visual Component Library) verschoben am Sa 16.09.2006 um 14:26
Jojojoxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: Sa 16.09.06 13:20 
Hat da wirklich niemand ne Idee zu??
Das betrifft doch wahrscheinlich viele Programme... :(

mfg

Jojo
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Sa 16.09.06 13:25 
Such mal nach Suche in der Entwickler-Ecke WM_QUERYENDSESSION

_________________
We are, we were and will not be.
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Sa 16.09.06 13:41 
user profile iconJojojoxx hat folgendes geschrieben:
Hallo!

Ich habe eine Sicherheitsabfrage vor dem Schließen meines Programms eingebaut im Ereignis OnCloseQuery. Wenn ich nun den PC Herunterfahre, wird das Programm ja auch geschlossen und dieses Ereignis ausgelöst.
Wie kann ich das verhindern??
Danke euch!


Hallo,

da wirst du wohl die Windows Message WM_QUERYENDSESSION verarbeiten müssen. Die stellt die Anfrage des Systems dar, ob die Applikation beendet werden kann, und gibt auch den Grund an (User Logoff). Also einfach ein Flag setzen, dass jetzt dann die User Session beendet wird und von da an nicht zurückfragen.

Möglicherweise gibt es auch eine Systemvariable dafür, ist mir aber nicht bekannt.

Gruss Reinhard
Jojojoxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: Sa 16.09.06 20:15 
Hi!

Ich habe mich jetzt ein wenig mit dem Thema befasst.
Da ich im Ereignis OnCloseQuery die Variable CanClose je nach Bedarf auf True oder false setze, hab ich mir nun eine globale Variable "AllowClose" gemacht vom Typ Boolean. Nun setze ich diese beim Programmstart auf False. Beim Herunterfahren des PCs wird sie auf True gesetzt, durch diesen Code (ist er richtig??):

ausblenden Quelltext
1:
2:
3:
4:
Procedure tForm1.WMQueryEndSession (Var Message: tMessage);
Begin
 AllowClose:=True;
End;


In OnCloseQuery wird CanClose nur dann evtl. auf False gesetzt, wenn AllowClose auch auf False steht, sonst wird CanClose direkt auf True gesetzt.
Jetzt habe ich aber das Problem, dass beim Herunterfahren von Windows nichts passiert, sprich der PC fährt nicht mehr herunter, gibt aber auch sonst keine Meldung von sich. Schließe ich mein Programm und versuche es erneut, fährt der PC runter.
Habt ihr dazu eine Idee?
Danke euch für die Hilfe!

mfg

Jojo
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Sa 16.09.06 23:17 
Du sagst Windows nicht, was es denn nun machen soll. Nachrichten haben ein Result, aus dem Windows dann was ableitet.

Standardmäßig ist das 0, also false. Damit verbietest du Windows das Herunterfahren(praktisch für...gewisse Programme ;) ).
Ergänze mal deinen Code um ein Message.Result:= 1

Damit sollte es funzen.

Martok

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Jojojoxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: So 17.09.06 00:20 
Hi!

Vielen Dank!
Es hat funktioniert! :)

mfg

Jojo