Benutzer mit den meisten Antworten
Zeit

Frage
-
Hallo
Ich möchte ein Programm machen, welches sich bei jedem Windowsstart ausführt und bei jedem windowsSchluss beendet. Während dem laufen notiert es die Zeit, so dass man immer genau weiss wielange man am Computer war, wie kann ich das realisieren?
LG Yves Riedener
Antworten
-
Hallo Yves,
Die UpTime der letzten Windows Arbeitssitzung kann man zum Beispiel mit dem Befehl: net statistics workstation herausfinden
è (Finden der Windows-Betriebszeit? http://support.microsoft.com/kb/555737). Dieses Befehl ergibt in der ersten Zeile zum Beispiel „Statistics since 3/29/2010 8:41:49 AM“. Durch die Differenz mit der aktuellen Zeit könnte man Rechnen wie viel Zeit schon vorüber ist seit dem letzten Start der Windows Arbeitssitzung.
Ein anderer Weg das Windows UpTime zu herausfinden ist durch WMI- Win32_OperatingSystem Class (Stichwort LastBootUpTime):
Imports System.Management Public Class Form1 Dim ts As TimeSpan Public Function GetUptime() As TimeSpan Dim uptimeTs As New TimeSpan() Dim management As New ManagementClass("Win32_OperatingSystem") Dim mngInstance As ManagementObjectCollection = management.GetInstances() For Each mngObject As ManagementObject In mngInstance Dim lastBootUp As DateTime = ParseDateTime(mngObject("LastBootUpTime").ToString()) If lastBootUp <> DateTime.MinValue Then uptimeTs = DateTime.Now - lastBootUp End If Next Return uptimeTs End Function ''' ''' Parser DateTime ''' ''' DateTime Format ''' yyyy MM dd hh mm ss.mmm mmm UTC ''' 2010 03 29 16 06 59.115 081+060 ''' Private Shared Function ParseDateTime(ByVal wmiDate As String) As DateTime Dim [date] As DateTime = DateTime.MinValue If wmiDate <> Nothing AndAlso wmiDate.IndexOf("."c) <> -1 Then Dim tempDate As String = wmiDate.Substring(0, wmiDate.IndexOf("."c) + 4) If tempDate.Length = 18 Then Dim year As Integer = Convert.ToInt32(tempDate.Substring(0, 4)) Dim month As Integer = Convert.ToInt32(tempDate.Substring(4, 2)) Dim day As Integer = Convert.ToInt32(tempDate.Substring(6, 2)) Dim hour As Integer = Convert.ToInt32(tempDate.Substring(8, 2)) Dim minute As Integer = Convert.ToInt32(tempDate.Substring(10, 2)) Dim second As Integer = Convert.ToInt32(tempDate.Substring(12, 2)) Dim milisecond As Integer = Convert.ToInt32(tempDate.Substring(15, 3)) [date] = New DateTime(year, month, day, hour, minute, second, _ milisecond) End If End If Return [date] End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Timer1.Enabled = True '//Timer auf 1000 Millisekunden End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick ts = GetUptime() TextBox1.Text = [String].Format("UpTime: {0} Tage, {1} Stunden, {2} Minuten, {3} Sekunden und {4} Millisekunden", ts.Days, ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds) End Sub End Class
Jetzt bleibt nur noch diese Anwendung irgendwann starten und die Zeitspanne speichern (Datenbank, TXT Datei, etc.) wenn Windows beendet wird (oder diese Anwendung laufen lassen wenn Windows beendet wird ???)
Grüße,
Robert
- Bearbeitet Robert BreitenhoferModerator Montag, 29. März 2010 13:27 oder diese ...
- Als Antwort vorgeschlagen Thorsten DörflerModerator Montag, 29. März 2010 14:05
- Als Antwort markiert Yves Riedener Donnerstag, 1. April 2010 09:07