[DllImport("coredll.dll")]
static extern bool GetSystemPowerStatusEx(SYSTEM_POWER_STATUS_EX pStatus,
bool fUpdate);
Declare Function GetSystemPowerStatusEx Lib "coredll.dll" _
(<Out()> ByRef pStatus As SYSTEM_POWER_STATUS_EX, _
ByVal fUpdate As Boolean) As Boolean
pStatus must be a valid object as values will be passed back in this structure. As the pointer to the object is not changed do not use the ref/out keywords in C#.
Please add some!
public static byte GetBatteryLeftPercentage()
{
SYSTEM_POWER_STATUS_EX powerStatus = new SYSTEM_POWER_STATUS_EX();
GetSystemPowerStatusEx( powerStatus, true);
return powerStatus.BackupBatteryLifePercent;
}
Complete VB.NET sample
Private Declare Function GetSystemPowerStatusEx Lib "coredll.dll" (ByRef pStatus As SYSTEM_POWER_STATUS_EX, ByVal fUpdate As Boolean) As Boolean
Private Structure SYSTEM_POWER_STATUS_EX
Dim ACLineStatus As Byte
Dim BatteryFlag As Byte
Dim BatteryLifePercent As Byte
Dim Reserved1 As Byte
Dim BatteryLifeTime As Int32
Dim BatteryFullLifeTime As Int32
Dim Reserved2 As Byte
Dim BatteryBackupFlag As Byte
Dim BackupBatteryLifePercent As Byte
Dim Reserved3 As Byte
Dim BackupBatteryLifeTime As Int32
Dim BackupBatteryFullLifeTime As Int32
End Structure
Public Function BatteryStrength() As Integer
Dim battStatus As SYSTEM_POWER_STATUS_EX
If GetSystemPowerStatusEx(battStatus, True) = True Then
Return CInt(battStatus.BatteryLifePercent)
Else
Return 0
End If
End Function
TODO