Autor Beitrag
uranop
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
BeitragVerfasst: Mi 27.08.08 08:13 
morgen,

Wie ja bekannt ist gibt windows alle zeiten ( installdate, uptime, last boot, currenttime ) in relation zum
1/1/1970 an. soweit sogut ...

ich moechte die winuptime vomrechner uebr wmi auslesen.
geht nicht direkt sondern mussin 2 schritten unterteilt werden
auslesen von last boot time und davon current time abziehen
mach ich mit folgenden routinen

- vereinfacht -

a = SELECT LastBootUpTime from Win32_OperatingSystem
b = SELECT LocalDateTime from Win32_OperatingSystem

die werte a und b sind strings.

um mit ihnen zu rechnen muss ich die in integer umwandeln also z.b. strtoint(a) ...

das Abziehen der zeiten von einander geht auch noch .

lustiger wirds nun mit dem umwandeln ....


da steige ich aus.

ich habe mal nen code aufgeschnappt

ausblenden Delphi-Quelltext
1:
EncodeDate(19701 ,1) + (Value / SecsPerDay)					


Value ist das wo die die Zeit zum umwandeln hernehmen ...

ich kann versuchen was ich will, ich bring meinen ausgerechneten uptimestring nicht konvertiert
entweder habe ich
string to extended fehler
int to extended

egal was immer mist ...

kann mir einer sagen wie ich das ´bewekstelligen kann ?
anscheinend kann ich wie ich auch die umwandlungen anbringe das nicht konvertieren

Moderiert von user profile iconTino: "Windoof" durch "Windows" im Titel ersetzt (die User sollen auch in Zukunft das Topic über die Suche finden).
delphi10
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Mi 27.08.08 08:40 
Hi

Ist zwar nicht direkt eine Antwort zu Deiner Frage, aber vielleicht gehts mit UpTime so etwas leichter und (?)schneller:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
    Function TFormx.UpTime: string;
    const
      ticksperday : Cardinal = 1000 * 60 * 60 * 24;
      ticksperhour : Cardinal = 1000 * 60 * 60;
      ticksperminute : Cardinal = 1000 * 60;
      tickspersecond : Cardinal = 1000;
    var
      t : longword;
      d, h, m, s : Cardinal;
    begin
      t := GetTickCount;
      d := t div ticksperday;
      dec(t, d * ticksperday);
      h := t div ticksperhour;
      dec(t, h * ticksperhour);
      m := t div ticksperminute;
      dec(t, m * ticksperminute);
      s := t div tickspersecond;
      Result := IntToStr(d)+ ' Tage '+IntToStr(h)+' Std '+IntToStr(m)+' Min '+IntToStr(s)+' Sek';
    end;

cu delphi10

_________________
Salus populi suprema lex esto
uranop Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
BeitragVerfasst: Mi 27.08.08 08:43 
lokal sicher ...
gebe ich dir recht ...

ich klicke mich aber beim "kunden" auf und muss das demzufolge remote irgendwie rauskitzeln.
da faellt mir atm nix anderes als wmi ein
uranop Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
BeitragVerfasst: Mi 27.08.08 10:15 
problem gelöst

mit hilfe von

www.torry.net/pages.php?id=1300
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 27.08.08 10:41 
Ich fände es sehr wünschens wet, wenn du deine Beiträge etwas sorgfälltiger verfassen würdest:
Zitat:
ich moechte die winuptime vomrechner uebr wmi auslesen.
geht nicht direkt sondern mussin 2 schritten unterteilt werden
auslesen von last boot time und davon current time abziehen
mach ich mit folgenden routinen

Das ist eine grammatikalische und orthografische Katastrophe.
uranop Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149

Win XP, Win 7, Slackware 11, FreeBSD
D6E, php
BeitragVerfasst: Sa 06.09.08 21:09 
Ehm, ja.
Also das nächste mal werde ich Deiner "Anweisung" natürlich folgeleisten.

Ich bin morgens meistens nicht so wirlich auf der geistigen Höhe mich mit der behämmerten Tastatur aus der Arbeit abfinden zu können.

Ich mag keine "ergonomischen" oder wie die Teile heissen : P
Da finde ich blind halt keine Tasten xD
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 06.09.08 23:43 
user profile iconuranop hat folgendes geschrieben:
lokal sicher ...
gebe ich dir recht ...

ich klicke mich aber beim "kunden" auf und muss das demzufolge remote irgendwie rauskitzeln.
da faellt mir atm nix anderes als wmi ein

Geht auch ohne WMI:
ausblenden volle Höhe Delphi-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:
  PTimeOfDayInfo = ^TTimeOfDayInfo;
  TTimeOfDayInfo = packed record
    tod_elapsedt: DWORD;
    tod_msecs: DWORD;
    tod_hours: DWORD;
    tod_mins: DWORD;
    tod_secs: DWORD;
    tod_hunds: DWORD;
    tod_timezone: Longint;
    tod_tinterval: DWORD;
    tod_day: DWORD;
    tod_month: DWORD;
    tod_year: DWORD;
    tod_weekday: DWORD;
  end;

function GetRemoteToD(machine: WideString): TTimeOfDayInfo;

function GetRemoteToD(machine: WideString): TTimeOfDayInfo;
var
  TimeOfDayInfo: PTimeOfDayInfo;
  dwRetValue: DWORD;
begin
  dwRetValue := NetRemoteTOD(PWideChar(WideString(Machine)), PBYTE(@TimeOfDayInfo));
   if dwRetValue <> NERR_Success then
    raise Exception.Create(SysErrorMessage(dwRetValue));
  with TimeOfDayInfo^ do
  begin
    Result := TimeOfDayInfo^;
    NetApiBufferFree(TimeOfDayInfo);
  end;
end;


Windows SDK hat folgendes geschrieben:

NetRemoteTOD
The NetRemoteTOD function returns the time of day information from a specified server.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
typedef struct _TIME_OF_DAY_INFO {
  DWORD tod_elapsedt; 
  DWORD tod_msecs;  // Uptime des Rechners in Millisekunden 
  DWORD tod_hours;
  DWORD tod_mins; 
  DWORD tod_secs;
  DWORD tod_hunds;
  LONG tod_timezone;
  DWORD tod_tinterval;
  DWORD tod_day;
  DWORD tod_month;
  DWORD tod_year; 
  DWORD tod_weekday;
} TIME_OF_DAY_INFO,
  *PTIME_OF_DAY_INFO,
  *LPTIME_OF_DAY_INFO;



ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
function FormatUpTime(msecs: int64): string;
var
  dwSecs            : DWORD;
  dwDays            : DWORD;
  ts                : SysUtils.TTimeStamp;
  UpTime            : TDateTime;
begin
  dwDays := 0;
  dwSecs := msecs div 1000;
  if dwSecs >= SecsPerDay then
  begin
    dwDays := dwSecs div SecsPerDay;
    dwSecs := dwSecs mod SecsPerDay;
  end;
  ts.Time := dwSecs * 1000;
  ts.Date := DateDelta;
  UpTime := SysUtils.TimeStampToDateTime(ts);
  Result := Format('%ud %sh %smin', [dwDays, FormatDateTime('h', UpTime),
    FormatDateTime('n', UpTime)])
end;


---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Hier ist der vollständige Code: www.delphipraxis.net...hners+ermitteln.html und noch ein paar Erklärungen.