Get Laptop Battery Status using C# and WMI

Article about how to get status of laptop battery


In this article I will show you how to show battery status of laptop battery like its battery is discharging, charging, full etc. We will do this using WMI because WMI have power to answer questions about battery status .So let's start with WMI.

 To access account information of Battery we need to Use System. Management  name space.

 To use this name space first of all we need to add reference to System.management by

Project Menu>>Add Reference.

after that at the top of the code use

using System.Management;

so that you can use of its classes . Now its simple to get information about laptop Battery through querying ManagementObjectSearcher Class .

 We can get all information about Laptop Battery through Win32_Battery class.

 so we need to query on that class to get related Management object and then we just need to get various properties related to it .

 setup interface like below on the form

1.gif

here i have taken two labels one textbox with read only property and one progress bar and a timer control .

now to get battery status we need to code like below .

        Dictionary<UInt16, string> StatusCodes;

        private void Form1_Load(object sender, EventArgs e)

        {

            StatusCodes = new Dictionary<ushort, string>();

            StatusCodes.Add(1, "The battery is discharging");

            StatusCodes.Add(2, "The system has access to AC so no battery is being discharged. However, the battery is not necessarily charging");

            StatusCodes.Add(3, "Fully Charged");

            StatusCodes.Add(4, "Low");

            StatusCodes.Add(5, "Critical");

            StatusCodes.Add(6, "Charging");

            StatusCodes.Add(7, "Charging and High");

            StatusCodes.Add(8, "Charging and Low");

            StatusCodes.Add(9, "Undefined");

            StatusCodes.Add(10,"Partially Charged");

 

            /* Set progress bar values and Properties */

            progressBar1.Maximum = 100;

            progressBar1.Style = ProgressBarStyle.Continuous;

 

 

            timer1.Enabled = true;

 

            ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_Battery");

            foreach (ManagementObject mo in mos.Get())

            {

                lblBatteryName.Text = mo["Name"].ToString();

                UInt16 statuscode = (UInt16)mo["BatteryStatus"];

                string statusString = StatusCodes[statuscode];

                lblBatteryStatus.Text = statusString;

            }

        }

 

        private void timer1_Tick(object sender, EventArgs e)

        {

            ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_Battery where Name='"+lblBatteryName.Text+"'");

            foreach (ManagementObject mo in mos.Get())

            {

 

                UInt16 statuscode = (UInt16)mo["BatteryStatus"];

                string statusString = StatusCodes[statuscode];

                lblBatteryStatus.Text = statusString;

               

                /* Set Progress bar according to status  */

                if (statuscode == 4)

                {

                    progressBar1.ForeColor = Color.Red;

                    progressBar1.Value = 5;

                }

                else if (statuscode == 3)

                {

                    progressBar1.ForeColor = Color.Blue;

                    progressBar1.Value = 100;

                }

                else if (statuscode == 2)

                {

                    progressBar1.ForeColor = Color.Green;

                    progressBar1.Value = 100;

                }

                else if (statuscode == 5)

                {

                    progressBar1.ForeColor = Color.Red;

                    progressBar1.Value = 1;

                }

                else if (statuscode == 6)

                {

                    progressBar1.ForeColor = Color.Blue;

                    progressBar1.Value = 100;

                }

            }

}


Here i have used few status only to show in progress bar you can code whatever you want to show in progress bar..

Thank you :)

erver'>