Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm soll sich nicht beenden lassen (https://www.delphipraxis.net/84019-programm-soll-sich-nicht-beenden-lassen.html)

Nils_13 10. Jan 2007 08:34


Programm soll sich nicht beenden lassen
 
Hi,

ich komme in letzter Zeit immer mal wieder auf die Powertaste, wenn ich eigentlich in Delphi auf F12 drücken will. Deshalb brauche ich ein Programm, welches sich nicht beenden lässt, wenn Windows alle Programme abknallt, um den Shutdownvorgang abzubrechen (ist klar, dass ich keine Viren programmieren will, ist wirklich nur für mich persönlich). Mit CanClose := False kann ich zwar verhindern, dass man es mit Alt+F4 oder dem Schließenbutton beendet, aber Windows würde mein Programm dennoch beenden können. Ich möchte eigentlich nur einen kleinen Button, der das manuelle Schließen ermöglicht, damit ich meinen PC, wenn ich wirklich will, auch herunterfahren kann --> Man muss das noch mit einer Booleanvariable verbinden. Irgendwelche Ideen ?

JasonDX 10. Jan 2007 08:44

Re: Programm soll sich nicht beenden lassen
 
Zitat:

Zitat von Nils_13
Irgendwelche Ideen ?

Das Einfachste waere doch, den Powerbutton einfach zu deaktivieren, und das BS ueber das Startmenu runterfahren.
Wenn dus mit so einem Programm machen willst hast du das Problem, dass alle Programme, die vor deinem die Meldung kriegen, runterzufahren, sich schliessen. Im Wort-Case kann es also passieren, dass du wiedermal auf den Power-Button kommst, alle Programme zu sind, und am Schluss halt der PC nicht runterfaehrt. ;)

greetz
Mike

Nils_13 10. Jan 2007 08:48

Re: Programm soll sich nicht beenden lassen
 
Und wie deaktiviere ich ihn ?

JasonDX 10. Jan 2007 08:54

Re: Programm soll sich nicht beenden lassen
 
Zitat:

Zitat von Nils_13
Und wie deaktiviere ich ihn ?

Die Option sollte in der Systemsteuerung in den Energieoptionen zu finden sein.

greetz
Mike

Nils_13 10. Jan 2007 09:20

Re: Programm soll sich nicht beenden lassen
 
Hm, da gibt es bei mir nur "Beim Drücken des Netzschalters am Computer : Computer Herunterfahren". Der Rest trifft nicht auf die Powertaste zu. Der Powerknopf am PC (NICHT an der TASTATUR) darf niemals deaktiviert werden, weil dies eine gute Methode ist, bei einem Absturz den PC ordentlich herunterzufahren (wenn mir manchmal z.B. nach einem Mod-test GTA-SA angestürzt ist, war dies die perfekte Lösung).

xZise 10. Jan 2007 09:22

Re: Programm soll sich nicht beenden lassen
 
Entweder:
1. Mach ein Button auf die form, welche das schließen freigibt:

Delphi-Quellcode:
procedure OnButtonClick...
begin
  StopBlock := true;
  close;
end;

procedure OnCloseQuery...
begin
  CanClose := StopBlock;
end;
2. Programmiere in Programm:
Deaktiviere den Button, wenn "Delphi" läuft.

Harry M. 10. Jan 2007 09:23

Re: Programm soll sich nicht beenden lassen
 
Fange den Vorgang des Herunterfahres ab mit WMQueryEndSession.

Nils_13 10. Jan 2007 09:25

Re: Programm soll sich nicht beenden lassen
 
Zitat:

Zitat von xZise
Entweder:
1. Mach ein Button auf die form, welche das schließen freigibt:

Delphi-Quellcode:
procedure OnButtonClick...
begin
  StopBlock := true;
  close;
end;

procedure OnCloseQuery...
begin
  CanClose := StopBlock;
end;
2. Programmiere in Programm:
Deaktiviere den Button, wenn "Delphi" läuft.

Das ist Windows egal, ob CanClose True ist oder nicht, es wird abgeknallt und dann war's das.

Zitat:

Zitat von Harry M.
Fange den Vorgang des Herunterfahres ab mit WMQueryEndSession.

Wie genau macht man das ? Ich hatte mit Messages noch nie zu tun.

Luckie 10. Jan 2007 09:27

Re: Programm soll sich nicht beenden lassen
 
Zitat:

Zitat von Nils_13
Zitat:

Zitat von Harry M.
Fange den Vorgang des Herunterfahres ab mit WMQueryEndSession.

Wie genau macht man das ? Ich hatte mit Messages noch nie zu tun.

Kennst du die Forensuche?

sirius 10. Jan 2007 09:28

Re: Programm soll sich nicht beenden lassen
 
Zitat:

Zitat von Nils_13
Hm, da gibt es bei mir nur "Beim Drücken des Netzschalters am Computer : Computer Herunterfahren". Der Rest trifft nicht auf die Powertaste zu. Der Powerknopf am PC (NICHT an der TASTATUR) darf niemals deaktiviert werden, weil dies eine gute Methode ist, bei einem Absturz den PC ordentlich herunterzufahren (wenn mir manchmal z.B. nach einem Mod-test GTA-SA angestürzt ist, war dies die perfekte Lösung).

Und was ist mit dem Tastaturteiber?

Luckie 10. Jan 2007 09:32

Re: Programm soll sich nicht beenden lassen
 
Zitat:

Zitat von Harry M.
Fange den Vorgang des Herunterfahres ab mit WMQueryEndSession.

Und was nützt ihm das? Windows beendet alle Programme die vor seinem die Nachricht bekommen und dann steht er da mit einem halben System und muss neu starten.

Nils_13 10. Jan 2007 09:35

Re: Programm soll sich nicht beenden lassen
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von Harry M.
Fange den Vorgang des Herunterfahres ab mit WMQueryEndSession.

Und was nützt ihm das? Windows beendet alle Programme die vor seinem die Nachricht bekommen und dann steht er da mit einem halben System und muss neu starten.

Ich weiß ja nicht, wie dein System aussieht, aber bei mir werden höchstens diese Programme abgeschossen: Trillian, Explorer, FF, Delphi, Player. Neustarten ? Wozu ? Es ist bloß enorm nervig, wenn der PC erst neustartet, alles neu laden muss...

Zitat:

Zitat von sirius
Zitat:

Zitat von Nils_13
Hm, da gibt es bei mir nur "Beim Drücken des Netzschalters am Computer : Computer Herunterfahren". Der Rest trifft nicht auf die Powertaste zu. Der Powerknopf am PC (NICHT an der TASTATUR) darf niemals deaktiviert werden, weil dies eine gute Methode ist, bei einem Absturz den PC ordentlich herunterzufahren (wenn mir manchmal z.B. nach einem Mod-test GTA-SA angestürzt ist, war dies die perfekte Lösung).

Und was ist mit dem Tastaturteiber?

Falls du Systemsteurung --> Tastatur meinst : Nichts.

Luckie 10. Jan 2007 09:41

Re: Programm soll sich nicht beenden lassen
 
Zitat:

Zitat von Nils_13
Zitat:

Zitat von Luckie
Zitat:

Zitat von Harry M.
Fange den Vorgang des Herunterfahres ab mit WMQueryEndSession.

Und was nützt ihm das? Windows beendet alle Programme die vor seinem die Nachricht bekommen und dann steht er da mit einem halben System und muss neu starten.

Ich weiß ja nicht, wie dein System aussieht, aber bei mir werden höchstens diese Programme abgeschossen: Trillian, Explorer, FF, Delphi, Player. Neustarten ? Wozu ?

Es gibt auch noch unsichtbare Fenster deren zugehörige Prozesse beendet werden. Und da wäre ich mir eben nicht so sicher, obn da nicht was wichtiges dabei ist.

Nils_13 10. Jan 2007 09:43

Re: Programm soll sich nicht beenden lassen
 
Ich konnte meinen PC insgesamt ca. 3x vor dem Runterfahren mit Trillian stoppen, dann konnte ich wieder alles starten und alles war in Ordnung. Damit habe ich zum Glück ausnahmsweise noch keine Probleme.

Harry M. 10. Jan 2007 10:05

Re: Programm soll sich nicht beenden lassen
 
Luckie, heißt ja nicht das sein "Abfang Programm" als letztes gekillt wird.
Ich will meinen rein gefühlsmässig, dass Windows wenn es runterfährt die Programme in einer Art "Rückwärts-Zählschleife" beendet.

Eigendlich sollte es auch delphi merken wenn Windows runterfährt und der Debugger sagt das er läuft und ob er beendet und dann gespeichert werden soll. (So jedenfalls bei mir).

sirius 10. Jan 2007 10:26

Re: Programm soll sich nicht beenden lassen
 
Zitat:

Zitat von Harry M.
Luckie, heißt ja nicht das sein "Abfang Programm" als letztes gekillt wird.
Ich will meinen rein gefühlsmässig, dass Windows wenn es runterfährt die Programme in einer Art "Rückwärts-Zählschleife" beendet.

Eigendlich sollte es auch delphi merken wenn Windows runterfährt und der Debugger sagt das er läuft und ob er beendet und dann gespeichert werden soll. (So jedenfalls bei mir).

Für dein Gefühl hat Windows anscheinend eine Liste:
Zitat:

Zitat von msdn
SetProcessShutdownParameters

Sets shutdown parameters for the currently calling process. This function sets a shutdown order for a process relative to the other processes in the system.


Warum dann nicht WM_QueryEndSession in einem globalen Hook "abfangen". Kann man zumindest mal probieren.

Nils_13 10. Jan 2007 10:38

Re: Programm soll sich nicht beenden lassen
 
Und was heißt das wieder konkret ? :( Ich spüre schon, das ist nicht so leicht.

kalmi01 10. Jan 2007 10:48

Re: Programm soll sich nicht beenden lassen
 
Zitat:

Warum dann nicht WM_QueryEndSession in einem globalen Hook "abfangen".
Warum so umständlich ?
Ein Prog, welches Windows am beenden hindert reicht doch schon.
Im Idealfall also das Prog, welches auch nicht beendet werden soll.

Delphi-Quellcode:
procedure WMQueryEndSession(var Msg: TMessage); message WM_QUERYENDSESSION;
......

procedure TForm1.WMQueryEndSession;
  begin
    Msg.Result := 0;  //Windows muss das Runterfahren stoppen

    CleanALL;

    Down := true;
    Msg.Result := 1;  //Windows darf Runterfahren
  end;
aus diesem Thread
Ich hoffe es hilft.

sirius 10. Jan 2007 10:55

Re: Programm soll sich nicht beenden lassen
 
Zitat:

Zitat von kalmi01
Zitat:

Warum dann nicht WM_QueryEndSession in einem globalen Hook "abfangen".
Warum so umständlich ?
Ein Prog, welches Windows am beenden hindert reicht doch schon.
Im Idealfall also das Prog, welches auch nicht beendet werden soll.

Weil ich in der Annahme bin, dass er nicht nur verhindern will, dass sein selbst programmiertes Programm beendet wird. Er möchte es bei allen Programmen/Prozessen.

Nils_13 10. Jan 2007 11:47

Re: Programm soll sich nicht beenden lassen
 
@kalmi01: Werde es probieren, danke.
@sirius: Das ist der Idealfall, aber schwer für mich zu programmieren.

xZise 11. Jan 2007 16:16

Re: Programm soll sich nicht beenden lassen
 
Hi Nils.

Zitat:

Zitat von Nils_13
Zitat:

Zitat von xZise
Entweder:
1. Mach ein Button auf die form, welche das schließen freigibt:

Delphi-Quellcode:
procedure OnButtonClick...
begin
  StopBlock := true;
  close;
end;

procedure OnCloseQuery...
begin
  CanClose := StopBlock;
end;
2. Programmiere in Programm:
Deaktiviere den Button, wenn "Delphi" läuft.

Das ist Windows egal, ob CanClose True ist oder nicht, es wird abgeknallt und dann war's das.

Stimmt nicht immer. Es gab hier einen Fall, in dem man das Programm über das "Close" in das Tray packt. Dummerweise ließ sich dann aber nicht sein PC runterfahren, weil genau diese Anwendung lief.
Leider kann ich den Thread nicht ausfindig machen.
Und PS: Außer du fährst "hart" runter...


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