none
Zeit RRS feed

  • 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
    Montag, 29. März 2010 12:00

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

    Montag, 29. März 2010 13:20
    Moderator