AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Betriebsstundenzähler

Ein Thema von benst · begonnen am 3. Okt 2006 · letzter Beitrag vom 4. Okt 2006
Antwort Antwort
benst

Registriert seit: 20. Jun 2004
155 Beiträge
 
Delphi 5 Standard
 
#1

Betriebsstundenzähler

  Alt 3. Okt 2006, 22:14
Hi,
ich würde gerne ein kleines Tool schreiben, was protokolliert, wie viele Stunden ich den Computer habe laufen lassen. Im Prinzip ziemlich simpel:
- Programm wird über Autostart gestart, liest die bisherigen Betriebsstunden aus einer Datei
- beim Herunterfahren, schreibt das Programm die neuen Betriebsstunden in die Datei
Mein Problem ist, dass ich nicht weiß, wie ich auf das Herunterfahren (oder Benutzerabmeldung) reagieren kann... Habe bei DP nur "Hunterfahren ausführen" gefunden... (Vermutlich habe ich fälsche Suchbegriffe benutzt...)
Gruß
Ben
P.S.: Delphi 5 Standard
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Betriebsstundenzähler

  Alt 3. Okt 2006, 22:24
Hier im Forum suchenGetTickCount, Hier im Forum suchenWM_ENDSESSION
Das ist eigentlich alles, was du brauchst.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Betriebsstundenzähler

  Alt 4. Okt 2006, 14:05
Hi,

ich würde das per OnCreate und OnClose Ereignis realisieren, beim starten des Prog. wird der bisherige
Stand ausgelesen und beim Beenden des Programms wird OnClose ausgelöst auch wenn der user das Prog.
nicht selber geschlossen hat sondern Windows beim herunterfahren, dann wird der neue Betriebsstundenzähler-
stand gespeichert.

Und die Zeit mißt du in dem du beim Start die zeit nimst und beim beenden auch und errechnest daraus die Differenz.

siehe SecondsBetween() etc.

Das ganze ist in 10 min. gebastelt.

mfg

TUX
  Mit Zitat antworten Zitat
benst

Registriert seit: 20. Jun 2004
155 Beiträge
 
Delphi 5 Standard
 
#4

Re: Betriebsstundenzähler

  Alt 4. Okt 2006, 18:15
Hier mein schnell gebastelter Betriebsstundezähler:
- Label1: seit
- Label2: ... Mal gestartet
- Label3: Betriebsstunden

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var save: TIniFile;
begin
  startTime := now;
  save := TIniFile.Create(ExtractFilePath(Application.ExeName) + '\save.ini');
  Label1.Caption := save.ReadString('Save', 'Since', DateTimeToStr(now));
  Label2.Caption := IntToStr(save.ReadInteger('Save', 'Runs', 1));
  timeOffset := save.ReadDateTime('Save', 'Time', 0);
  save.Free;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if not Shutdown then
  begin
    if MessageDlg('Wollen Sie das Programm wirklich beenden ?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then
    begin
      CanClose := False;
      Exit;
    end;
  end;
end;

//[edit]
procedure TForm1.WMENDSESSION(var Msg: TWMQueryEndSession);
var save: TIniFile;
begin
  save := TIniFile.Create(ExtractFilePath(Application.ExeName) + '\save.ini');
  save.WriteString('Save', 'Since', Label1.Caption);
  save.WriteInteger('Save', 'Runs',StrToInt(Label2.Caption)+1);
  save.WriteDateTime('Save', 'Time', timeOffset + now-startTime);
  save.Free;

//[edit]
  Msg.Result := 1;
  Shutdown := True;
// inherited;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
save: TIniFile;
begin
  save := TIniFile.Create(ExtractFilePath(Application.ExeName) + '\save.ini');
  save.WriteString('Save', 'Since', Label1.Caption);
  save.WriteInteger('Save', 'Runs',StrToInt(Label2.Caption)+1);
  save.WriteDateTime('Save', 'Time', timeOffset + now-startTime);
  save.Free;
end;

function convertTime(time: Extended; dms: String): Integer;
begin
  if dms='dthen result:= Floor(time)
  else if dms='hthen result:= Floor( (time-Floor(time))*24 )
  else if dms='mthen result:= Floor( (time*24-Floor(time*24))*60 )
  else if dms='sthen result:= Floor( (time*24*60-Floor(time*24*60))*60 )
  else result:=-1;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label3.Caption := IntToStr(convertTime(timeOffset + now-startTime, 'd')) + ' d' + #13#10
                  + IntToStr(convertTime(timeOffset + now-startTime, 'h')) + ' h' + #13#10
                  + IntToStr(convertTime(timeOffset + now-startTime, 'm')) + ' m' + #13#10
                  + IntToStr(convertTime(timeOffset + now-startTime, 's')) + ' s' + #13#10;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Betriebsstundenzähler

  Alt 4. Okt 2006, 18:19
Ich habe doch geschrieben WM_ENDSESSION. WM_QUERYENDSESSION wird von Windows gesendet, wenn Windows runtergefahren werden soll. Verneint en programm diese Anfrage, wird Windows nicht runtergefahren. bekommt dein Fenster diese Nachricht jetzt als erstes, speichert es die Zeit ab. Aber Windows fährt ja gar nicht runter. WM_ENDSESSIOn wird von Windows gesendet, wenn kein Fenster Einspruch erhoben hat und Windows tatsächlich runtergefahren wird.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

Re: Betriebsstundenzähler

  Alt 4. Okt 2006, 18:24
Was sucht denn das inherited im Message Handler?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
benst

Registriert seit: 20. Jun 2004
155 Beiträge
 
Delphi 5 Standard
 
#7

Re: Betriebsstundenzähler

  Alt 4. Okt 2006, 18:29
Also so?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Betriebsstundenzähler

  Alt 4. Okt 2006, 21:13
Du reagierst immer noch auf WM_QUERYENDSESSION:
procedure TForm1.WMENDSESSION(var Msg: TWMQueryEndSession);
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

Re: Betriebsstundenzähler

  Alt 4. Okt 2006, 22:27
procedure TForm1.WMENDSESSION(var Msg: TWMQueryEndSession); Macht nicht so viel Sinn oder TMessageWMQueryEndSession ... nimm doch einfach auch TWMEndSession ...

So hast du ja nur den Message Handler umbenannt, aber nicht die Message neu definiert, auf die du reagieren willst.

Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  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 00:14 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