Did you tried with
[DllImport("kernel32.dll")]
static extern bool GetSystemPowerStatus(out SYSTEM_POWER_STATUS
lpSystemPowerStatus)
Actually I never tried it, but this should help.
http://www.pinvoke.net/default.aspx/kernel32/GetSystemPowerStatus.html[
^]
Let us know!
Cheers
UPDATE:
I just checked a simple solution:
using System;
using System.Runtime.InteropServices;
public class SystemPower
{
[DllImport("kernel32.dll", SetLastError = true)]
private static extern Boolean GetSystemPowerStatus(out SystemPowerStatus sps);
private enum ACLineStatus : byte
{
Offline = 0,
Online = 1,
Unknown = 255
}
private enum BatteryFlag : byte
{
High = 1,
Low = 2,
Critical = 4,
Charging = 8,
NoSystemBattery = 128,
Unknown = 255
}
private struct SystemPowerStatus
{
public ACLineStatus LineStatus;
public BatteryFlag flgBattery;
public Byte BatteryLifePercent;
public Byte Reserved1;
public Int32 BatteryLifeTime;
public Int32 BatteryFullLifeTime;
}
public static Boolean ACPowerPluggedIn()
{
SystemPowerStatus SPS = new SystemPowerStatus();
GetSystemPowerStatus(out SPS);
if (SPS.LineStatus == ACLineStatus.Online)
{
return true;
}
else
{
return false;
}
}
public static Int32 BatteryCharge()
{
SystemPowerStatus SPS = new SystemPowerStatus();
GetSystemPowerStatus(out SPS);
return (Int32)SPS.BatteryLifePercent;
}
}
private void btnCheckBattCharge_Click(object sender, EventArgs e)
{
lblBatteryCharge.Text = SystemPower.BatteryCharge().ToString();
}
And is working like a charm!
So, based on this example you can retrieve all information you need.
Cheers again!