Getting Hardware Information using Visual Basic.NET and VBScript continued
This article explains how to retrieve hardware information using both Visual Basic.NET and VBScript. In my previous article, I covered motherboards, onboard devices and processors. In this article, I concentrate on BIOS, BUS, motherboard, memory and audio related information.
A downloadable file for this article is available here.
The sample downloadable solution (zip) was entirely developed using Visual Studio.NET 2003 Enterprise Architect on Windows Server 2003 Standard Edition. But I am confident that it would work with other versions of Windows (which support .NET 1.1) as well.
I contributed several articles on WMI with VB.NET and VBScript (including the articles on introductory or basic topics of WMI). I even contributed a series (of about six articles) on “WMI Programming on VB.NET” covering several aspects of WMI. I strongly suggest you go through the series, before going through this article.
Listing the “BIOS” information
Some scenarios may require some properties of BIOS to be listed. We can retrieve this information dynamically using VB.NET. Before trying to retrieve the hardware information, let us create the wrapper with BIOS structure:
Public Sub addRow(ByRef dt As DataTable, ByVal p As String, ByVal v As String)
Dim dr As DataRow
dr = dt.NewRow
dr("Property") = p
dr("Value") = v
dt.Rows.Add(dr)
End Sub
The above method “addRow” adds a single row based on the structure you create for the data table using the following method.
Public Function getStructure() As DataTable
Dim dt As New DataTable
dt.Columns.Add(New DataColumn("Property"))
dt.Columns.Add(New DataColumn("Value"))
Return dt
End Function
Once you complete the creation of wrapper, the following VB.NET code should support retrieval of some minimum information about the BIOS available on your system.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim searcher As New ManagementObjectSearcher( _
"root\CIMV2", _
"SELECT * FROM Win32_BIOS")
Dim dt As DataTable = globals.getStructure
For Each queryObj As ManagementObject In searcher.Get ()
Some scenarios may require some properties of the BUS to be listed. We can retrieve the same information dynamically using VB.NET. Before trying to retrieve the hardware information, let us create the wrapper with BUS structure:
Public Function getBusStructure() As DataTable
Dim dt As New DataTable
dt.Columns.Add(New DataColumn("BusType"))
dt.Columns.Add(New DataColumn("DeviceID"))
dt.Columns.Add(New DataColumn("PNPDeviceID"))
dt.Columns.Add(New DataColumn("SystemName"))
Return dt
End Function
The following method “addBus” adds a single row based on the structure you create for the data table using the above method.
Public Sub addBus(ByRef dt As DataTable, ByVal BusType As String, ByVal DeviceID As String, ByVal PNPDeviceID As String, ByVal SystemName As String)
Dim dr As DataRow
dr = dt.NewRow
dr("BusType") = BusType
dr("DeviceID") = DeviceID
dr("PNPDeviceID") = PNPDeviceID
dr("SystemName") = SystemName
dt.Rows.Add(dr)
End Sub
Once you complete the creation of wrapper, the following VB.NET code should support retrieving some minimum information about the BUS available on your system.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim searcher As New ManagementObjectSearcher( _
"root\CIMV2", _
"SELECT * FROM Win32_Bus")
Dim dt As DataTable = globals.getBusStructure
For Each queryObj As ManagementObject In searcher.Get()
My previous article already listed some “On Board Devices” and also some information abou the “Base Board.” This section works as an extension to both of them. Basically, we are going to try to retrieve the “PrimaryBusType”, “SecondaryBusType” and “DeviceID” of the available “MotherBoard.” Before trying to retrieve the hardware information, let us create the wrapper with “MotherBoard” structure:
Public Function getMotherBoardDevice() As DataTable
The following method “addMotherBoardDevice” adds a single row based on the structure you create for the data table using the above method.
Public Sub addMotherBoardDevice(ByRef dt As DataTable, ByVal DeviceID As String, ByVal PrimaryBusType As String, ByVal SecondaryBusType As String)
Dim dr As DataRow
dr = dt.NewRow
dr("DeviceID") = DeviceID
dr("PrimaryBusType") = PrimaryBusType
dr("SecondaryBusType") = SecondaryBusType
dt.Rows.Add(dr)
End Sub
Once you complete the creation of wrapper, the following VB.NET code should support retrieving some minimum information about the motherboard available on your system.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim searcher As New ManagementObjectSearcher( _
"root\CIMV2", _
"SELECT * FROM Win32_MotherboardDevice")
Dim dt As DataTable = globals.getMotherBoardDevice
For Each queryObj As ManagementObject In searcher.Get ()
If you really want to retrieve memory information (especially RAM), you must go through this section. The following code displays all RAM devices on your computer along with the starting and ending address. Before trying to retrieve the hardware information, let us create the wrapper with “MemoryDevice” structure:
Public Function getMemoryDeviceStructure() As DataTable
Dim dt As New DataTable
dt.Columns.Add(New DataColumn("DeviceID"))
dt.Columns.Add(New DataColumn("EndingAddress"))
dt.Columns.Add(New DataColumn("StartingAddress"))
dt.Columns.Add(New DataColumn("SystemName"))
Return dt
End Function
The following method “addMemoryDevice” adds a single row based on the structure you create for the data table using the above method.
Public Sub addMemoryDevice(ByRef dt As DataTable, ByVal DeviceID As String, ByVal EndingAddress As String, ByVal StartingAddress As String, ByVal SystemName As String)
Dim dr As DataRow
dr = dt.NewRow
dr("DeviceID") = DeviceID
dr("EndingAddress") = EndingAddress
dr("StartingAddress") = StartingAddress
dr("SystemName") = SystemName
dt.Rows.Add(dr)
End Sub
After creating the wrapper, the following VB.NET code should support retrieving some minimum information about the memory available on your system.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim searcher As New ManagementObjectSearcher( _
"root\CIMV2", _
"SELECT * FROM Win32_MemoryDevice")
Dim dt As DataTable = globals.getMemoryDeviceStructure
For Each queryObj As ManagementObject In searcher.Get ()
The following code displays information about the audio device installed on your computer. Before trying to retrieve the hardware information, let us create the wrapper with “SoundDevice” structure:
Public Function getSoundDeviceStructure() As DataTable
Dim dt As New DataTable
dt.Columns.Add(New DataColumn("Manufacturer"))
dt.Columns.Add(New DataColumn("Name"))
dt.Columns.Add(New DataColumn("PNPDeviceID"))
dt.Columns.Add(New DataColumn("ProductName"))
Return dt
End Function
The following method “addSoundDevice” adds single row based on the structure you create for the data table using the above method.
Public Sub addSoundDevice(ByRef dt As DataTable, ByVal Manufacturer As String, ByVal Name As String, ByVal PNPDeviceID As String, ByVal ProductName As String)
Dim dr As DataRow
dr = dt.NewRow
dr("Manufacturer") = Manufacturer
dr("Name") = Name
dr("PNPDeviceID") = PNPDeviceID
dr("ProductName") = ProductName
dt.Rows.Add(dr)
End Sub
Once you complete the creation of wrapper, the following VB.NET code should support with some minimum information about the sound device available on your system.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim searcher As New ManagementObjectSearcher( _
"root\CIMV2", _
"SELECT * FROM Win32_SoundDevice")
Dim dt As DataTable = globals.getSoundDeviceStructure
For Each queryObj As ManagementObject In searcher.Get ()