如何使用vb.net访问电池(笔记本电脑)信息?

时间:2012-09-06 09:45:35

标签: vb.net visual-studio-2010 visual-studio operating-system system

如何使用vb.net访问电池(笔记本电脑)信息? 我想获得有关电池的制造细节和完整细节:

  • BatteryDeviceName
  • BatteryEstimatedTime
  • BatteryGranularityInformation
  • BatteryInformation
  • BatteryManufactureDate
  • BatteryManufactureName
  • BatterySerialNumber
  • BatteryTemperature
  • BatteryUniqueID

2 个答案:

答案 0 :(得分:3)

您可以从Win32_Battery课程中获取所有内容 - http://msdn.microsoft.com/en-us/library/windows/desktop/aa394074(v=vs.85).aspx

class Win32_Battery : CIM_Battery
{
  uint16   Availability;
  uint32   BatteryRechargeTime;
  uint16   BatteryStatus;
  string   Caption;
  uint16   Chemistry;
  uint32   ConfigManagerErrorCode;
  boolean  ConfigManagerUserConfig;
  string   CreationClassName;
  string   Description;
  uint32   DesignCapacity;
  uint64   DesignVoltage;
  string   DeviceID;
  boolean  ErrorCleared;
  string   ErrorDescription;
  uint16   EstimatedChargeRemaining;
  uint32   EstimatedRunTime;
  uint32   ExpectedBatteryLife;
  uint32   ExpectedLife;
  uint32   FullChargeCapacity;
  datetime InstallDate;
  uint32   LastErrorCode;
  uint32   MaxRechargeTime;
  string   Name;
  string   PNPDeviceID;
  uint16   PowerManagementCapabilities[];
  boolean  PowerManagementSupported;
  string   SmartBatteryVersion;
  string   Status;
  uint16   StatusInfo;
  string   SystemCreationClassName;
  string   SystemName;
  uint32   TimeOnBattery;
  uint32   TimeToFullCharge;
};

Win32_Battery属性:http://include.wutils.com/wmi/ROOT%5Ccimv2/CIM_ManagedSystemElement/CIM_LogicalElement/CIM_LogicalDevice/CIM_Battery/Win32_Battery.html

电池序列号

 Dim results As String = ""
        Dim batteryReturn As Management.ManagementObjectCollection
        Dim batterySearch As Management.ManagementObjectSearcher
        batterySearch = New Management.ManagementObjectSearcher("root\cimv2", "Select * from Win32_Battery")
        batteryReturn = batterySearch.Get

        For Each baseobject In batteryReturn
            results += baseobject("DeviceID")
        Next

        Messagebox.show(results, "Battery serial:")

示例代码来自http://msdn.microsoft.com/en-us/library/system.windows.forms.systeminformation.powerstatus.aspx#Y0

Imports Microsoft.VisualBasic
Imports System
Imports System.Collections
Imports System.ComponentModel
Imports System.Drawing
Imports System.Reflection
Imports System.Windows.Forms

Public Class SystemInfoBrowserForm
    Inherits System.Windows.Forms.Form

    Private listBox1 As System.Windows.Forms.ListBox
    Private textBox1 As System.Windows.Forms.TextBox  

    Public Sub New()
        Me.SuspendLayout()
        InitForm()

        ' Add each property of the SystemInformation class to the list box. 
        Dim t As Type = GetType(System.Windows.Forms.SystemInformation)
        Dim pi As PropertyInfo() = t.GetProperties()
        Dim i As Integer 
        For i = 0 To pi.Length - 1
            listBox1.Items.Add(pi(i).Name)
        Next i
        textBox1.Text = "The SystemInformation class has " + pi.Length.ToString() + " properties." + ControlChars.CrLf

        ' Configure the list item selected handler for the list box to invoke a  
        ' method that displays the value of each property. 
        AddHandler listBox1.SelectedIndexChanged, AddressOf listBox1_SelectedIndexChanged

        Me.ResumeLayout(False)
    End Sub     

    Private Sub listBox1_SelectedIndexChanged(sender As Object, e As EventArgs)
        ' Return if no list item is selected. 
        If listBox1.SelectedIndex = - 1 Then 
            Return 
        End If          
        ' Get the property name from the list item. 
        Dim propname As String = listBox1.Text

        If propname = "PowerStatus" Then 
            ' Cycle and display the values of each property of the PowerStatus property.
            textBox1.Text += ControlChars.CrLf + "The value of the PowerStatus property is:" 
            Dim t As Type = GetType(System.Windows.Forms.PowerStatus)
            Dim pi As PropertyInfo() = t.GetProperties()
            Dim i As Integer 
            For i = 0 To pi.Length - 1
                Dim propval As Object = pi(i).GetValue(SystemInformation.PowerStatus, Nothing)
                textBox1.Text += ControlChars.CrLf + "    PowerStatus." + pi(i).Name + " is: " + propval.ToString()
            Next i
        Else 
            ' Display the value of the selected property of the SystemInformation type. 
            Dim t As Type = GetType(System.Windows.Forms.SystemInformation)
            Dim pi As PropertyInfo() = t.GetProperties()
            Dim prop As PropertyInfo = Nothing 
            Dim i As Integer 
            For i = 0 To pi.Length - 1
                If pi(i).Name = propname Then
                    prop = pi(i)
                    Exit For 
                End If 
            Next i
            Dim propval As Object = prop.GetValue(Nothing, Nothing)
            textBox1.Text += ControlChars.CrLf + "The value of the " + propname + " property is: " + propval.ToString()
        End If 
    End Sub     

    Private Sub InitForm()
        ' Initialize the form settings 
        Me.listBox1 = New System.Windows.Forms.ListBox()
        Me.textBox1 = New System.Windows.Forms.TextBox()
        Me.listBox1.Anchor = CType(System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left Or System.Windows.Forms.AnchorStyles.Right, System.Windows.Forms.AnchorStyles)
        Me.listBox1.Location = New System.Drawing.Point(8, 16)
        Me.listBox1.Size = New System.Drawing.Size(172, 496)
        Me.listBox1.TabIndex = 0
        Me.textBox1.Anchor = CType(System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right, System.Windows.Forms.AnchorStyles)
        Me.textBox1.Location = New System.Drawing.Point(188, 16)
        Me.textBox1.Multiline = True 
        Me.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
        Me.textBox1.Size = New System.Drawing.Size(420, 496)
        Me.textBox1.TabIndex = 1
        Me.ClientSize = New System.Drawing.Size(616, 525)
        Me.Controls.Add(Me.textBox1)
        Me.Controls.Add(Me.listBox1)
        Me.Text = "Select a SystemInformation property to get the value of" 
    End Sub

    <STAThread()>  _
    Shared Sub Main()
        Application.Run(New SystemInfoBrowserForm())
    End Sub 

End Class

答案 1 :(得分:0)

就像在c#中一样(如果谷歌搜索解决方案不搜索vb,搜索.net甚至是c#)。见https://stackoverflow.com/a/8946096

(我会使用http://msdn.microsoft.com/en-us/library/system.windows.forms.powerstatus.aspx - 如果只有电源状态相关的话)