Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi OnClose problem (https://www.delphipraxis.net/76298-onclose-problem.html)

qb-tim 1. Sep 2006 16:56


OnClose problem
 
Hi,

Ich glaube ich werde schon im DP-Forum für meine etwas merkwürdigen Beiträge für Überwachungsprogramme berüchtigt. Tut mir leid, wenn ich irgendetwas falsch gemacht habe...

Ich Programmiere ein Programm, der etwas wie ein Task-Manager "4Dummies" ist. Es kann nur anzeigen, welche Fenster und Programme offen oder minimiert sind und die Programme in der Taskbar auflisten. Es kann aber auch die Programme schließen (eben wie ein normaler Task-Manager). Damit das Programm nicht von externen Personen (Häcker u.a) dazu benutzt werden kann, Programme zum Abstürzen zu bringen, muss der Benutzter einen PIN eingeben, der bei der ersten Benutzung festgelegt und codiert gespeichert wird.
Außerdem soll dieses Programm anzeigen, wann zuletzt ein- und ausgelogged wurde. Ich habe mich entschieden dazu die ONCLOSE Prozedur dafür zu benutzen... Mein Problem ist:

Wie lasse ich die OnClose Prozedur laufen, wenn der Benutzer auslogged bzw. den Computer herunterfährt?

sh17 5. Sep 2006 10:51

Re: OnClose problem
 
Du meinst, das OnClose nicht aufgerufen wird, wenn Windows herunterfährt?

Der Einstiegspunkt beim Herunterfahren wäre:

Delphi-Quellcode:
TMyForm = class(TForm)
private
    procedure WMQueryEndSession(var Message: TWMQueryEndSession); message WM_QUERYENDSESSION;
    procedure WMEndSession(var Msg: TMessage); message WM_ENDSESSION;
end;
Dort kannst Du Deine abschliessenden Dinge ausführen lassen.

qb-tim 5. Sep 2006 20:16

Re: OnClose problem
 
:? Wie baue ich das denn ein?

(Tut mir leid wenn ich so dumm frage... :( )

sh17 6. Sep 2006 09:16

Re: OnClose problem
 
Einfach die beiden prozeduren oben in in den private-Bereich Deines Hauptformulares kopieren, Klasse vervollständigen.

Du benötigst eigentlich nur die WMEndSession.

Delphi-Quellcode:
TMyForm = class(TForm)
  procedure FormCreate(Sender: TObject);
  procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
  Closed : Boolean;
  procedure DoClose;
  procedure WMEndSession(var Msg: TMessage); message WM_ENDSESSION;
end;

...

procedure TMyForm.FormCreate(Sender: TObject);
begin
  Closed := false;
end;

procedure TMyForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  DoClose;
end;

procedure TMyForm.WMEndSession(var Msg: TMessage);
begin
  DoClose;
end;

procedure TMyForm.DoClose;
begin
  if Closed then exit;
  Closed := true;
 
  //sonst was machen
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:05 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 by Thomas Breitkreuz