Introduction:
This article describes an approach used to determine
the time of the last system boot up and to display the time elapsed since boot
up. The application uses element of the System.Management library to run a
select query against Win32_OperatingSystem; the application also display the
amount of elapsed time since system boot up by comparing the boot up time
against the current time; the elapsed time is updated every 1000 milliseconds
whilst the application is running. A TimeSpan object is used to calculate the
difference between the current time and the boot up time.
Figure 1: The Application
Getting Started:
In order to get started, unzip the included project and
open the solution in the Visual Studio 2008 environment. In the solution
explorer, you should note these files (Figure 2):
Figure 2: Solution Explorer
As you can see from Figure 2; there is a single Win
Forms project containing a single form. All code required of this application
is included in this form's code.
The Main Form (Form1.vb).
The main form of the application, Form1, contains all
of the code necessary. The form contains
If you'd care to open the code view up in the IDE you
will see that the code file begins with the following library import:
Imports
System.Management
Following the imports, the class is defined:
Public
Class Form1
Next up, a local variable is defined:
' local member variable
Private dtBootTime As
New DateTime()
This variable is used to store the last boot up time; this
value is set when the application starts and is used in each subsequent
evaluation the elapsed time (in response to a timer tick event).
The next section of code is the form's constructor; the
only addition to the default was to enable the timer used to update the display
of the elapsed time since the last system boot up.
''' <summary>
''' Constructor - Enable the
''' Elapsed time timer control
''' </summary>
'''
<remarks></remarks>
Public Sub
New()
' This call is required by the Windows Form Designer.
InitializeComponent()
' Add any initialization after the
InitializeComponent() call.
' start the timer
timer1.Enabled =
True
End Sub
Next up is form load event handler; in this section of
code, a SelectQuery from System.Management is created and set to obtain the last
boot up time from the operating system. The query is executed and a
ManagementDateTimeConverter is used convert the recovered value to a
System.DateTime value. That value is then used to set the boot time variable
and to then display the start date and start time for the last system boot up.
''' <summary>
''' On form load, use a Management.Select query
''' to discover the last boot time and set
''' the boot time datetime variable to maintain
''' that value
''' </summary>
''' <param
name="sender"></param>
''' <param
name="e"></param>
'''
<remarks></remarks>
Private Sub
Form1_Load(ByVal sender
As System.Object,
ByVal e
As
System.EventArgs) Handles
MyBase.Load
' define a select query
Dim query As _
New SelectQuery("SELECT
LastBootUpTime FROM Win32_OperatingSystem WHERE
Primary='true'")
'
create a new management object searcher and pass it
' the select query
Dim searcher As
New ManagementObjectSearcher(query)
' get the datetime value and set the local boot
' time variable to contain that value
Dim mo As
ManagementObject
For Each mo
In searcher.Get()
dtBootTime = _
ManagementDateTimeConverter.ToDateTime( _
mo.Properties("LastBootUpTime").Value.ToString())
' display the start time and date
txtDate.Text =
dtBootTime.ToLongDateString()
txtTime.Text =
dtBootTime.ToLongTimeString()
Next
searcher =
Nothing
mo =
Nothing
End Sub
Next up is the timer tick event handler; the timer is
set to an interval of 1000 milliseconds and every time one second passes, the
elapsed time is recalculated by setting the difference between the boot up time
and the current time into a TimeSpan object. The time span is then used to set
the display of the hours, minutes, and seconds that have passed since the last
system boot up.
''' <summary>
''' Update the display of the lapsed time
''' using the time span between the logged
''' boot time and now
''' </summary>
''' <param
name="sender"></param>
''' <param
name="e"></param>
'''
<remarks></remarks>
Private Sub
timer1_Tick(ByVal sender
As _
System.Object, _
ByVal e As
System.EventArgs) _
Handles timer1.Tick
' get the current difference betwee
' the last boot time and now using
' a timespace
Dim ts As
TimeSpan = DateTime.Now - dtBootTime
' display the hours, minutes, and seconds
' since the last boot time
txtLapsedHours.Text
= (ts.Hours).ToString()
txtLapsedMinutes.Text = (ts.Minutes).ToString()
txtLapsedSeconds.Text = (ts.Seconds).ToString()
End Sub
The final code block is the button click event handler
used to exit the application:
''' <summary>
''' Exit the application
''' </summary>
''' <param
name="sender"></param>
''' <param
name="e"></param>
'''
<remarks></remarks>
Private Sub
btnExit_Click(ByVal sender
As _
System.Object, _
ByVal e
As System.EventArgs) _
Handles
btnExit.Click
Application.Exit()
End Sub
End
Class
Summary
This article is intended to describe an approach to
obtaining the time since last system boot up through the use of the
System.Management library. The same approach may be used to extract other bits
of information from the system in a similar fashion. As an application, it is
semi-useful to me, I keep something like this on my desktop; since I tend to
work odd hours, I reboot my machine when I start a work session and use it to
keep track of the exact amount of time that I have worked.