Find out battery charge capacity in percentage using C# or .NET

后端 未结 9 1495
谎友^
谎友^ 2020-12-03 03:21

I have an application that gets detailed system information, and I have been able to get the percent of charge remaining but not the percent of the battery itself.

E

9条回答
  •  失恋的感觉
    2020-12-03 03:46

    Don't have a laptop to test with, but I'm guessing you could use the WMI class Win32_Battery.

    It has two fields that look interesting - DesignCapacity, which tells you

    Design capacity of the battery in milliwatt-hours.

    and FullChargeCapacity, which has the fascinating note that

    Full charge capacity of the battery in milliwatt-hours. Comparison of the value to the DesignCapacity property determines when the battery requires replacement.

    So my guess is that you can use WMI to read these two values, and then calculate FullChargeCapacity/DesignCapacity to find the battery health percentage number.

    EDIT

    Here's a brief example of accessing WMI information using C#. I first added a reference to the System.Management assembly. Then:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Management;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                System.Management.ObjectQuery query = new ObjectQuery("Select * FROM Win32_Battery");
                ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
    
                ManagementObjectCollection collection = searcher.Get();
    
                foreach (ManagementObject mo in collection)
                {
                    foreach (PropertyData property in mo.Properties)
                    {
                        Console.WriteLine("Property {0}: Value is {1}", property.Name, property.Value);
                    }                   
                }
            }
        }
    }
    

    Also, note that you are basically running a SQL-like query against WMI, so you can vary that if you want. Windows Management Instrumentation Query Language, or WQL, is what you want to search for to learn more about it.

    Also take a look at ahawker's answer, it may end up being more helpful if WMI isn't properly capturing the battery data, as he notes.

提交回复
热议问题