Entwickler-Ecke

Windows API - Windows uptime


Cyberbob - Sa 05.10.02 16:49
Titel: Windows uptime
Hi ihr,

wie kann ich erkennen wie lange Windows schon läuft? Also, mein Programm soll eigentlich nicht dirket mit Autostart gestartet werden, sondern erst nachher und dann würde ich die Uptime von Windows gerne auslesen geht das??

Cyberb :P b


OregonGhost - Sa 05.10.02 18:13

Das geht mit GetTickCount().


SMI - Sa 05.10.02 18:19

Achtung, du solltest beachten, dass der Wert bei einer Bereichsüberschreitung wieder zu null wird! Das kann böse Fehler geben, besonders wenn Berechnungen damit durchgeführt werden!

Siehen WinAPI:
"The internal timer wraps around to zero if Windows is run continuously for approximately 49.7 days."

SMI


Cyberbob - Sa 05.10.02 18:23

OregonGhost hat folgendes geschrieben:
Das geht mit GetTickCount().


Geht das bitte etwas genauer für einen Nicht profi ...??


SMI - Sa 05.10.02 18:26


Quelltext
1:
2:
3:
4:
5:
Var 
i:longInt;
Begin
  i:= GetTickCount;
END;

i sind die millisekunden seitem windows gestartet ist

SMI

(05.10.02 22:27 Tino) Code-Tags hinzugefügt.


Delete - Sa 05.10.02 21:30

Im EDH gibt es eine Funktion dafür. Und ich möchte behaupten, die hier bei AUQ.de auch schon gesehen zu haben - die schlüsselt Stunden, Minuten, Sekunden, Tage, Wochen ... :wink: ... genau auf und zeigt nicht den nackten Wert von "GetTickCount".


Cyberbob - Mo 07.10.02 18:17

MathiasSimmack hat folgendes geschrieben:
Im EDH gibt es eine Funktion dafür.


Mit dem EDH(easy delphi helper,[url]http://www.delphi-treff.de[/url]) hab ich das Problem nun gelöst und es sogar optisch ganz gut hinbekommen.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
var
  Form1: TForm1;
  Ticks : Integer;
  day, hour, min, sec : Integer;
  result:string;
const
  DAYS : Integer = 1000 * 60 * 60 * 24;
  HOURS : Integer = 1000 * 60 * 60;
  MINUTES : Integer = 1000 * 60;
  SECONDS : Integer = 1000;
implementation

{$R *.dfm}

function GetWindowsUpTime: String;
const
  DAYS : Integer = 1000 * 60 * 60 * 24;
  HOURS : Integer = 1000 * 60 * 60;
  MINUTES : Integer = 1000 * 60;
  SECONDS : Integer = 1000;
  begin;
  end;



procedure TForm1.FormCreate(Sender: TObject);

begin
 Ticks := GetTickCount;
    //GetTickCount gibt die Zeit nach einem Windowstart an

 day := Ticks div DAYS; //Tage
 dec(Ticks, day * DAYS);

 hour := Ticks div HOURS; //Stunden
 dec(Ticks, hour * HOURS);

 min := Ticks div MINUTES; //Minuten
 dec(Ticks, min * MINUTES);

 sec := Ticks div SECONDS; //Sekunden

 Result := IntToStr(day)+' Tage'+
           IntToStr(hour)+' Stunden'+
           IntToStr(min)+' Minuten'+
           IntToStr(sec)+' Sekunden';
end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
label1.Caption:=result;
end;

stellt den Timer auf 1000 (=1sek.) und jede Sekunde wird die Uptime aktualisiert.

Cyberb :P b