AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Unterscheidung Programmende durch Windows-Shutdown oder manu
Thema durchsuchen
Ansicht
Themen-Optionen

Unterscheidung Programmende durch Windows-Shutdown oder manu

Ein Thema von Siggi · begonnen am 19. Jun 2004 · letzter Beitrag vom 19. Jun 2004
Antwort Antwort
Siggi

Registriert seit: 19. Jun 2004
Ort: Lollar
52 Beiträge
 
Delphi 11 Alexandria
 
#1

Unterscheidung Programmende durch Windows-Shutdown oder manu

  Alt 19. Jun 2004, 12:11
Hi,

da mein DSL-Volumentarif oft überschritten wird, habe ich einen kleinen TrafficMonitor geschrieben und auf den PCs der Kinder installiert, um wenigsten zu wissen, wer da mal wieder Gigabyteweise Daten gezogen hat.
Damit das Programm aber nicht einfach ausgeschaltet werden kann, schreibe ich jedes Beenden in eine Log-Datei. Ideal wäre, wenn ich erkennen könnte, ob das Programm durch einen Windows-Shutdown beendet wurde oder ob es manuell (z.B. über ALT-F4) geschlossen wurde.

Ich habe schon alle Schließ-Optionen die mit der Maus erreichbar sind entweder entfernt oder so angepasst, dass in der Log-Datei drinsteht, dass manuell beendet wurde, aber Alt-F4 bleibt immer noch übrig und den Task-Manager zum Abschießen gibt es ja auch noch.

Die Kids dürfen das Programm ja auch beenden - ich möchte das aber mitbekommen!

Gruß,
Siggi
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: Unterscheidung Programmende durch Windows-Shutdown oder

  Alt 19. Jun 2004, 12:16
Bei einem Windows-Shutdown wird eine eigene Message gesendet, die WM_QueryEndSession heißt. Sieh dir dazu mal den Beitrag hier an:
http://www.delphipraxis.net/internal...ueryendsession

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Unterscheidung Programmende durch Windows-Shutdown oder

  Alt 19. Jun 2004, 12:33
oder du könntest auch einen kleinen "guard" schreiben, der versteckt läuft und immer wieder überprüft, ob dein Programm noch läuft, läuft es nicht mahr, aber der guard noch, so kannst du davon ausgehen, dass es beendet wurde und eventuell dein Programm wieder starten.
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#4

Re: Unterscheidung Programmende durch Windows-Shutdown oder

  Alt 19. Jun 2004, 13:17
In dem von MrKnogge erwähnten Fall kannst du sogar noch einen Schritt weitergehen:
Der Guard überprüft dein Programm und umgekehrt. Wird eines der Programme geändert so wird es sofort vom anderen Prog neu gestartet. Denn sonst könnte man ja zuerst den Guard abschießen und danach das andere.
Wichtig: Wenn ein Prog über den Taskmanager abgeschossen wird, so gibts meines Wissens nach keine Message, also musst du das ausschließen.

Greetz
alcaeus

PS: Wenn du WinXP verwendest, dann könntest du den Prozess ja "svchost.exe" heißen, denn von dem laufen normal 5, da wird es relativ schwer den richtigen in der Liste zu finden.
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Baal

Registriert seit: 28. Aug 2003
53 Beiträge
 
Delphi XE2 Starter
 
#5

Re: Unterscheidung Programmende durch Windows-Shutdown oder

  Alt 19. Jun 2004, 13:34
geht nicht auch der code:

Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
 CanClose:=False
end;
grüße
wo ein wille ist, ist auch ein Delphi...
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Unterscheidung Programmende durch Windows-Shutdown oder

  Alt 19. Jun 2004, 13:38
Hi,

beim Killen eines Prozesses, wird der Prozess nicht darüber benachrichtigt, dass es beendet wird. Er kriegt davon nichts mit...

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Unterscheidung Programmende durch Windows-Shutdown oder

  Alt 19. Jun 2004, 13:44
Zitat von mirage228:
beim Killen eines Prozesses, wird der Prozess nicht darüber benachrichtigt, dass es beendet wird. Er kriegt davon nichts mit...
Was man aber auch ausnutzen kann. Während dem Start wird eine Datei angelegt (oder meinetwegen ein Registrierungseintrag). Wird das Programm ordnungsgemäß beendet, so wird die Datei (bzw. der Registrierungseintrag) gelöscht. Ist selbiges beim Start des Programmes also noch vorhanden, weißt du, dass der Prozess das letzte Mal gekillt wurde.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Baal

Registriert seit: 28. Aug 2003
53 Beiträge
 
Delphi XE2 Starter
 
#8

Re: Unterscheidung Programmende durch Windows-Shutdown oder

  Alt 19. Jun 2004, 13:44
das programm vorm taskmanager geht so(ausgenommen bei NT und 2000):
Delphi-Quellcode:
  function RegisterServiceProcess
    (dwProcessID, dwType: DWord) : DWord; stdcall;


implementation

{$R *.DFM}

function RegisterServiceProcess(dwProcessID,
  dwType: DWord): DWord;
  external 'KERNEL32.DLLname 'RegisterServiceProcess';
und in OnCreate schreibst du dann:

RegisterServiceProcess(0,1);
wo ein wille ist, ist auch ein Delphi...
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Unterscheidung Programmende durch Windows-Shutdown oder

  Alt 19. Jun 2004, 13:46
Moin Siggi,

So kannst Du es ALT-F4 fest machen:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure WMSYSCOMMAND(var msg : TMessage); message WM_SYSCOMMAND;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.WMSYSCOMMAND(var msg: TMessage);
begin
  if msg.WParam = SC_CLOSE then exit;
  inherited;
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:42 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