views:

181

answers:

3

I have two laptops here. One is running Vista, the other Windows 7. I need to get the specifications on the batteries in both, how do I go about that?

The reason I'm asking is that I'd like to know if they're lithium ion or something else. Supposedly other types of batteries may have adversely affected charge capacities if left plugged in for too long.

+5  A: 

You could use WMI and the Win32_Battery class. It has a property called Chemistry that has this information.

UPDATE:

Actually, there is also Win32_PortableBattery, which would be more appropriate for a laptop battery. They both inherit from the CIM_Battery class.

Garett
+1 Awesome find!
Preet Sangha
+5  A: 

The IOCTL_BATTERY_QUERY_INFORMATION info from DeviceIOControl can tell you the following info:

Information level

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

The BatteryInformation structure contains the Chemistry field which describes this info you require.

  • PbAc : Lead Acid
  • LION : Lithium Ion
  • Li-I : Lithium Ion
  • NiCd : Nickel Cadmium
  • NiMH : Nickel Metal Hydride
  • NiZn : Nickel Zinc
  • RAM : Rechargeable Alkaline-Manganese

There is an example here: http://msdn.microsoft.com/en-us/library/bb204769(v=VS.85).aspx

Preet Sangha
+1  A: 

If you're using managed code (C# or VB) the Windows API Code Pack has a wrapper class that raises .NET events when power events (going on or off AC, reaching critical battery level etc) happen and exposes properties like estimated battery life remaining. It also includes a whole pile of gory details - the sample shows them.

Kate Gregory