Entwickler-Ecke

Windows API - Systemzeit sperren


sunday_2 - Mi 06.11.02 17:29
Titel: Systemzeit sperren
Hi,

ich möchte in meinem Programm eine Start und Endzeit ermitteln.
Ich kann mir auch über ein label die Zeit anschauen.
Ich möchte jedoch ermitteln wann mein Programm gestartet wurde und wann es beendet wurde. Leider kann man das durch einfaches Manipulieren der Systemzeit beeinflussen.
Wie kann ich den die Systemzeit für den User sperren, solange mein Programm läuft.

Gruß Sunday


matze - Mi 06.11.02 18:25

du könntest die zeit bein starten deines programmes in eine variable einlesen und dann per timer erhöhen. so wie halt eine "künstliche" und interne systemuhr


OregonGhost - Mi 06.11.02 20:59

Du kannst mit GetTickCount() die Zeit, die seit dem Systemstart vergangen ist, in Millisekunden abfragen. Diese wird durch das Ändern der Systemzeit nicht beeinflusst.


sunday_2 - Do 07.11.02 09:48

Wie funktioniert das mit GetTickCount()?

Ich habe

Quelltext
1:
2:
3:
4:
procedure TStatistik.SpeedButton1Click(Sender: TObject);
begin
        l_time_end.Caption:= TimeToStr(GetTickCount());
end;

Bei Click auf den Button bekomme ich allerdings immer nur 00:00:00
Wieso rechnet er die Zeit nicht mit.

Gruß Sunday

P.S. In der Delphi-Hilfe steht leider nichts zu GetTickCount.


sunday_2 - Do 07.11.02 09:53

Hi Matze,

du hast geschrieben
Zitat:

Quelltext
1:
du könntest die zeit bein starten deines programmes in eine variable einlesen und dann per timer erhöhen. so wie halt eine "künstliche" und interne systemuhr                    

Wenn ich in Label.Caption:=TimeToStr(Time) eingebe, läuft die Systemzeit mit. Wie schaffe ich es das ich nur die Startzeit als festen Wert bekomme.


LCS - Do 07.11.02 10:25

Hi
am einfachsten ist die Variante die OregonGhost beschrieben hat. Beim Programmstart rufst du GetTickCount ab und speicherst den Wert in einer Variablen.
Beim Programmende rufst du wieder GetTickCount ab und ziehst davon den Inhalt deiner Variablen ab. Damit hast du die Programmlaufzeit in Millisekunden.

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var
  ticks : cardinal;

procedure TStatistik.FormCreate(Sender: TObject);
begin
  ticks := GetTickCount;
end;

procedure TStatistik.SpeedButton1Click(Sender: TObject); 
var
  runningSince: cardinal;
begin 
  runningSince := (GetTickCount - ticks) div 1000; //Zeit in Sekunden
  l_time_end.Caption := TimeToStr( runningSince / 86400 );

end;

Nicht getestet, sollte aber funktionieren.

Gruss Lothar


sunday_2 - Do 07.11.02 10:42

Hat funktionert!

Vielen Dank :D

Gruß Sunday


matze - Do 07.11.02 16:41

na dann ist ja prima !!!

damit spare ich mir jetzt hier einen code zu posten :wink: