VB 5/6-Tipp 0077: Wie lange läuft Windows schon?
von ActiveVB
Beschreibung
Dieser Tipp zeigt, wie lange das System schon läuft.
Update am 23. September 2004:
Es wird nun berücksichtigt, dass GetTickCount einen vorzeichenlosen Wert zurück liefert und dieser erst für VB konvertiert werden muss.
Achtung: GetTickCount sollte nicht in Produktivsystemen verwendet werden, da GetTickCount alle 49,7 Tage wieder bei Null zu zählen beginnt (Überlauf des Datentyps).
Wer einen Wert haben will, der zuverlässiger ist, sollte sich laut MSDN Library in Richtung PerformanceCounter informieren, da das System eine PerformanceCounter bereitstellt, welcher einen 8 Byte großen Wert ähnlich dem von GetTickCount bereitstellt.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Project1.vbp ------------- '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Timersteuerelement "Timer1" ' Steuerelement: Beschriftungsfeld "Label1" ' Steuerelement: Beschriftungsfeld "Label2" Option Explicit Private Declare Function GetTickCount Lib "kernel32" () As Long Private Sub Timer1_Timer() Dim H As Double, M As Double Dim S As Double, MS As Double Dim strH As String, strM As String Dim strS As String, strMS As String MS = SignedToUnsignedLong(GetTickCount()) MS = MS / 1000 H = Int(MS / 3600) MS = MS - H * 3600 M = Int(MS / 60) MS = MS - M * 60 S = Int(MS) MS = Int((MS - S) * 10) strH = CStr(H) strM = Format(CStr(M), "##00") strS = Format(CStr(S), "##00") strMS = CStr(MS) Label1.Caption = strH & ":" & strM & ":" & strS & ":" & strMS End Sub Private Function SignedToUnsignedLong(ByVal LongIn As Long) As Double If LongIn < 0 Then SignedToUnsignedLong = LongIn + 4294967296# Else SignedToUnsignedLong = LongIn End If End Function '---------- Ende Formular "Form1" alias Form1.frm ---------- '-------------- Ende Projektdatei Project1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 7 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Masiar am 01.03.2007 um 12:51
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () _
As Long
'-----------------------------------------------------------
Private Sub cmdWindowsTime_Click()
'-----------------------------------------------------------Dim duration As String
Dim start As String
Dim d As String, h As String, m As String, s As String
s = GetTickCount() \ 1000
d = CLng(s) \ 86400 '= Tage
s = s - (d * 86400)
h = CLng(s) \ 3600 '= Stunden
s = s - (h * 3600)
m = CLng(s) \ 60 '= Minuten
s = s - (m * 60)
duration = "Der PC läuft seit:" & Chr(10) & _
IIf(d = 0, "", IIf(d > 1, d & "Tage, ", d & "Tag, ")) & _
IIf(h = 1, "1 Stunde, ", h & " Stunden, ") & _
IIf(m = 1, "1 Minute, ", m & " Minuten, ") & _
IIf(s = 1, "1 Sekunde", s & " Sekunden") & "!"
start = "Start: " & FormatDateTime((Now() - d), vbLongDate) & "; " & _
Format(CDate(FormatDateTime(Now(), vbLongTime)) _
- CDate(FormatDateTime(TimeSerial(h, m, s), vbLongTime)), _
"hh:mm:ss")
ActiveSheet.Range("F2").Value = duration & Chr(10) & start
End Sub 'cmdWindowsTime_Click
Kommentar von laurin t. rother am 10.01.2006 um 14:10
also das programm is echt super... ich hab mir als erstes mal ne exe erstellt und das ding in den Autostart gepackt
Kommentar von am 04.11.2005 um 11:38
49,7 Tage * 86400 Sekunden/Tag * 1000 ms/Sekunde ) = 2^32
Da die Millisekundenzähler bei älteren Windows-Versionen nur 32 Bit breit waren, läuft so ein Zähler genau nach 49 Tagen und 17 Stunden über ==> weiße Buchstaben auf blauem Hintergrund ;-)
Kommentar von Sensei am 12.05.2005 um 10:42
Für alle, die hier nur C+P gemacht haben, der Timer Intervall muss noch manuell auf 50 gesetzt werden ;-)
...So wie es im Beispielprojekt des Downloades bereits ist!
Kommentar von Exp-Soft am 15.06.2004 um 09:31
also ich hatte meinen Rechner fast 50 Tage am stück am laufen leider Meldete sich mein rechner nach 49 Tagen und 22 stunden mit einem Bluescreen. Hat Ms da ne Funktion eingebaut das nen Windows nie länger als 49 Stunden läuft?
Bzw. kann man von VB nicht aufs Bios eventuell die Laufzeitdes systems abfragen? bin der meinung gewesen da irgendwas ma drüber gelesen zu haben das es nen Interrupt dafür gibt, wenn man über Windows überhauptdrauf zugreifen darf!!
Kommentar von Eraser am 08.04.2004 um 15:14
Wenn der PC schon einige Monate lang an ist könnte man das Änderungsdatum der pagefile.sys vergleichen. Leider ist diese Datei nicht immer auf C:\
Zu einer Netzwerkverbindung merkt sich Windows auch wie lange sie schon offen ist.
Kommentar von Frank Dzaebel am 06.12.2001 um 10:16
Oder einfacher: Label1.Caption = FormatDateTime(TimeSerial(0, 0, GetTickCount() \ 1000), vbLongTime)