|
Interessiert es Sie, wann ein Windows-System gestartet worden ist, oder wie lange es schon läuft? In Millisekunden ist letzteres leicht in Erfahrung zu bringen - die API-Funktion GetTickCount liefert diesen Wert - im Prinzip. Denn nach etwa 49,7 Tagen wird der Wert auf 0 zurückgesetzt, da der vorzeichenlose Long-Wert überläuft. Wenn Sie mit dieser Einschränkung leben können, liefert ihnen die folgende Funktion SysStartDateTime Datum und Uhrzeit des letzten Systemstarts.
Private Declare Function GetTickCount Lib "kernel32" () As Long
Public Function SysStartDateTime() As Date
Dim nSeconds As Variant
Dim nDays As Long
Dim nDayNow As Long
Const kDaySeconds = 86400
nSeconds = _
Int(CDec(GetTickCount() - (Timer * 1000&)) / CDec(1000&))
nDayNow = CLng(CDbl(Now))
nDays = Int(CDec(nSeconds) / CDec(kDaySeconds))
nSeconds = nSeconds - (CDec(nDays) * CDec(kDaySeconds))
SysStartDateTime = _
CDate(nDayNow - nDays - TimeSerial(0, 0, nSeconds))
End Function
Eine kleine Anmerkung zum Code der Funktion: Um Rundungsfehler zu vermeiden, wird von der Millisekundenzeit, die GetTickCount liefert, der VB-eigene Millisekunden-Wert (Timer * 1000, Messung seit letzter Mitternacht)) abgezogen. Zum Ausgleich wird bei der abschließenden Berechnung in der letzten Zeile nur der Tagesanteil des aktuellen Datums (nDayNow) verwendet.
Die folgende Funktion SysTimeRunning wandelt den von SysStartDateTime gelieferten Date-Wert zur Anzeige in die Anzahl der Tage und einen Zeit-String um.
Public Sub SysTimeRunning(SysStartDateTime As Date, Days As Long, _
HMS As String)
Dim nDiff As Date
nDiff = Now - SysStartDateTime
Days = CLng(CDbl(nDiff))
HMS = Format$(nDiff, "hh:nn:ss")
End Sub
|