thongkorn โพสต์ 2019-2-6 14:45:16

[VB.NET] การอ่านค่าคุณสมบัติทั้งหมดรวดเดียวของอุปกรณ์คอมพิวเตอร์ด้วย WMI

http://www.g2gnet.com/webboard/images/vbnet/wmiinfo.png


โค้ดชุดนี้ไม่มีอะไรมาก เกิดจากความขี้เกียจของแอดมินในการใช้ WMI Creator เพื่อจะมาดูรายการคุณสมบัติของอุปกรณ์แต่ละตัว ก็เลยเลือกเอาตัวหลักๆ เช่น Mainboard หรือ Disk Drive มามัดรวมกัน ... หากต้องการจะดูอุปกรณ์อื่นๆ ก็เลือกมาจาก WMI Creator เพิ่มเอาเองล่ะกันครับ

มาดูโค้ดฉบับเต็มกันเถอะ ...
' / --------------------------------------------------------------------------------
' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
' / eMail : thongkorn@hotmail.com
' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
' / Facebook: https://www.facebook.com/commonindy (Worldwide)
' / MORE: http://www.g2gnet.com/webboard
' /
' / Purpose: Read Information with WMI (Windows Management Instrumental)
' / Microsoft Visual Basic .NET (2010)
' /
' / This is open source code under @Copyleft by Thongkorn Tubtimkrob.
' / You can modify and/or distribute without to inform the developer.
' / --------------------------------------------------------------------------------

'// Don't forget add --> Reference --> System.Management
Imports System.Management

Public Class frmWMIInformation

    Private Sub frmWMIInformation_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
      '// หากอยากได้ Class อื่นๆ ให้ไปดูจาก WMI Creator ครับ
      With cmbDevice
            .Items.Add("Win32_BaseBoard")
            .Items.Add("Win32_PhysicalMedia")
            .Items.Add("Win32_NetworkAdapter")
            .Items.Add("Win32_Processor")
            .Items.Add("Win32_DiskDrive")
            .Items.Add("Win32_DiskDrive USB Only")
            .SelectedIndex = 0
      End With
    End Sub

    Private Sub cmbDevice_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbDevice.SelectedIndexChanged
      Select Case cmbDevice.SelectedIndex
            Case 0, 1, 2, 3
                Call GetWMIInfo()
            Case 4, 5
                Call GetUsbInfo()
      End Select
    End Sub

    Private Sub GetWMIInfo()
      '// Initialize ListView Control
      With lvwData
            .Clear()
            .View = View.Details
            .GridLines = True
            .FullRowSelect = True
            .HideSelection = False
            .MultiSelect = False
            .Columns.Add("Properties", lvwData.Width \ 2 - 130)
            .Columns.Add("Values", lvwData.Width \ 2 + 100)
      End With
      Dim LV As ListViewItem
      Try
            '// Windows Query Language หรือ WQL
            Dim WmiQuery As String = "SELECT * FROM " & cmbDevice.Text
            Dim WmiSearcher As New ManagementObjectSearcher(WmiQuery)
            For Each info As ManagementObject In WmiSearcher.Get()
                For Each item As PropertyData In info.Properties()
                  Try
                        LV = lvwData.Items.Add("" & item.Name)
                        LV.SubItems.Add("" & item.Value)
                  Catch ex As Exception
                  End Try
                Next
            Next
      Catch err As ManagementException
            MessageBox.Show("An error occurred while querying for WMI data: " & err.Message)
      End Try
    End Sub

    ' / --------------------------------------------------------------------------------
    ' / Function to read Usb Flash Information and return value of all drives.
    Sub GetUsbInfo()
      ' Initialize ListView Control
      With lvwData
            .Clear()
            .View = View.Details
            .GridLines = True
            .FullRowSelect = True
            .HideSelection = False
            .MultiSelect = False
            .Columns.Add("Properties", lvwData.Width \ 2 - 130)
            .Columns.Add("Values", lvwData.Width \ 2 + 100)
      End With
      Dim LV As ListViewItem
      Try
            '// Windows Query Language หรือ WQL
            Dim WmiQuery As String = "SELECT * FROM " & "Win32_DiskDrive"
            Dim WmiSearcher As New ManagementObjectSearcher(WmiQuery)
            For Each info As ManagementObject In WmiSearcher.Get()
                If cmbDevice.SelectedIndex = 4 Then
                  '// Get only USB interface type.
                  If info("InterfaceType") <> "USB" Then
                        For Each item As PropertyData In info.Properties()
                            Try
                              LV = lvwData.Items.Add("" & item.Name)
                              LV.SubItems.Add("" & item.Value)
                            Catch ex As Exception
                            End Try
                        Next
                  End If
                Else
                  '// Get only USB interface type.
                  If info("InterfaceType") = "USB" Then
                        For Each item As PropertyData In info.Properties()
                            Try
                              LV = lvwData.Items.Add("" & item.Name)
                              LV.SubItems.Add("" & item.Value)
                            Catch ex As Exception
                            End Try
                        Next
                  End If
                End If
            Next
      Catch err As ManagementException
            MessageBox.Show("An error occurred while querying for WMI data: " & err.Message)
      End Try
    End Sub

    Private Sub frmWMIInformation_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
      Me.Dispose()
      Application.Exit()
    End Sub

End Class

ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ได้ที่นี่ ...


หน้า: [1]
ดูในรูปแบบกติ: [VB.NET] การอ่านค่าคุณสมบัติทั้งหมดรวดเดียวของอุปกรณ์คอมพิวเตอร์ด้วย WMI