[VB.NET] แสดงรายละเอียดชิ้นส่วนของคอมพิวเตอร์ด้วย WMI
http://www.g2gnet.com/webboard/images/vbnet/ListComputerPart.pngสำหรับโค้ดชุดนี้ก็จะเป็นการเรียกใช้งาน WMI (Windows Management Instrumenation) ซึ่งแอดมินได้เคยอธิบายไว้หลายครั้งแล้ว ขอสรุปให้ฟังอีกที คือการอ่านค่าคุณสมบัติทั้งฮาร์ดแวร์และซอฟท์แวร์ต่างๆบนระบบปฏิบัติการ Windows โดยบทความนี้เราจะอ่านค่าจากการเขียนด้วยโค้ด VB.NET สายงาน IT Support สามารถนำไปใช้งานในเรื่องของ Asset Inventory หรือการจัดเก็บข้อมูลวัสดุอุปกรณ์ ครุภัณฑ์ของสำนักงาน เป็นต้น ...
ต้องเรียกใช้งาน System Management (.NET) ...
http://www.g2gnet.com/webboard/images/vbnet/ListComputerPartNet.png
หากต้องการส่งข้อมูลออกไปยัง Excel ต้องเรียกใช้ COM (Component Object Model) ...
http://www.g2gnet.com/webboard/images/vbnet/ListComputerPartExcel.png
ตัดให้เหลือเฉพาะ Reference ที่ต้องใช้งาน ...
http://www.g2gnet.com/webboard/images/vbnet/ListComputerPartRef.png
มาดูโค้ดฉบับเต็มกันเถอะ ...
Imports System.Management
Imports Excel = Microsoft.Office.Interop.Excel
Public Class frmListComputerPart
Private Sub frmListComputerPart_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
' Initialize ListView Control
With ListView1
.View = View.Details
.GridLines = True
.FullRowSelect = True
.HideSelection = False
.MultiSelect = False
.Columns.Add("Part name", ListView1.Width \ 2 - 50)
.Columns.Add("Description", ListView1.Width \ 2 + 20)
End With
Dim LV As ListViewItem
Dim i As Integer
Dim strComputer As String = "."
' Processor
Dim Searcher As New ManagementObjectSearcher( _
"root\CIMV2", _
"SELECT * FROM Win32_Processor")
For Each QueryObj As ManagementObject In Searcher.Get()
LV = ListView1.Items.Add("System Name")
LV.SubItems.Add(QueryObj("SystemName"))
LV = ListView1.Items.Add("CPU Name")
LV.SubItems.Add(QueryObj("Name"))
LV = ListView1.Items.Add("Processor ID")
LV.SubItems.Add(QueryObj("ProcessorID"))
Next
' BaseBoard
Searcher = New ManagementObjectSearcher( _
"root\CIMV2", _
"SELECT * FROM Win32_BaseBoard")
For Each QueryObj As ManagementObject In Searcher.Get()
LV = ListView1.Items.Add("MainBoard Manufacturer")
LV.SubItems.Add(QueryObj("Manufacturer"))
LV = ListView1.Items.Add("MainBoard Serial Number")
LV.SubItems.Add(QueryObj("SerialNumber"))
LV = ListView1.Items.Add("MainBoard Product Name")
LV.SubItems.Add(QueryObj("Product"))
Next
' Hard Disk Drive use PhysicalMedia Class
Searcher = New ManagementObjectSearcher( _
"root\CIMV2",
"SELECT * FROM Win32_PhysicalMedia")
i = 1
For Each QueryObj As ManagementObject In Searcher.Get()
If InStr(QueryObj("Tag"), "CDROM") = 0 Then
LV = ListView1.Items.Add("Hard Disk Serial Number (" & i & ")")
LV.SubItems.Add(Trim(QueryObj("SerialNumber")))
i = i + 1
End If
Next
' CD/DVD
Searcher = New ManagementObjectSearcher( _
"root\CIMV2",
"SELECT * FROM Win32_CDROMDrive")
i = 1
For Each QueryObj As ManagementObject In Searcher.Get()
LV = ListView1.Items.Add("CD/DVD Manufacturer (" & i & ")")
LV.SubItems.Add(Trim(QueryObj("Name")))
LV = ListView1.Items.Add("CD/DVD Serial Number (" & i & ")")
LV.SubItems.Add(Trim(QueryObj("SerialNumber")))
i = i + 1
Next
' Memory
Searcher = New ManagementObjectSearcher( _
"root\CIMV2",
"SELECT * FROM Win32_PhysicalMemory")
i = 1
For Each QueryObj As ManagementObject In Searcher.Get()
LV = ListView1.Items.Add("Memory (" & i & ")")
LV.SubItems.Add(Trim(QueryObj("Manufacturer")) & "/" & Trim(QueryObj("SerialNumber")))
i = i + 1
Next
' Network adapter
Searcher = New ManagementObjectSearcher( _
"root\CIMV2", _
"SELECT * FROM Win32_NetworkAdapter")
For Each QueryObj As ManagementObject In Searcher.Get()
If Not String.IsNullOrEmpty(QueryObj("MACAddress")) And Microsoft.VisualBasic.Left(QueryObj("MACAddress"), 2) <> "00" Then
LV = ListView1.Items.Add("MAC Address")
LV.SubItems.Add(QueryObj("MACAddress"))
LV = ListView1.Items.Add("Network Card Manufacturer")
LV.SubItems.Add(QueryObj("Manufacturer"))
LV = ListView1.Items.Add("Network Product Name")
LV.SubItems.Add(QueryObj("ProductName"))
End If
Next
End Sub
'// Export to Excel.
Private Sub btnExportExcel_Click(sender As System.Object, e As System.EventArgs) Handles btnExportExcel.Click
Dim xlApp As Excel.Application = New Excel.Application
Dim xlWorkBook As Excel.Workbook = xlApp.Workbooks.Add
Dim xlWorkSheet As Excel.Worksheet = xlWorkBook.ActiveSheet
' Read data in ListView control and sending them to Excel Sheet.
For i As Integer = 0 To ListView1.Items.Count - 1
xlApp.Cells(i + 1, 1) = ListView1.Items(i).Text ' First column
xlApp.Cells(i + 1, 2) = ListView1.Items(i).SubItems(1).Text ' Second column
Next
' Adjust autofit columns
xlWorkSheet.Columns.AutoFit()
' Open Excel
xlApp.Visible = True
End Sub
Private Sub frmListComputerPart_Resize(sender As Object, e As System.EventArgs) Handles Me.Resize
' Resize ListView Control.
If ListView1.Columns.Count > 0 Then
With ListView1
.Columns(0).Width = ListView1.Width \ 2 - 50
.Columns(1).Width = ListView1.Width \ 2 + 20
End With
End If
End Sub
Private Sub frmListComputerPart_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
Me.Dispose()
GC.SuppressFinalize(Me)
Application.Exit()
End Sub
End Class
ดาวน์โหลดโค้ดฉบับเต็ม VB.NET (2010) ได้ที่นี่ ...
ขอบคุณครับ
หน้า:
[1]