public static Int32 GetBatteryStatus() { _SYSTEM_POWER_STATUS_EX2 pwrStat; // allocate the necessary memory on the native side. We have a class (_SYSTEM_POWER_STATUS_EX2) that // has the same memory layout as its native counterpart IntPtr ptr = Utils.LocalAlloc(Marshal.SizeOf(typeof(_SYSTEM_POWER_STATUS_EX2))); // fill in the required fields pwrStat = new _SYSTEM_POWER_STATUS_EX2(); UInt32 pwrStatSize = (UInt32)Marshal.SizeOf(typeof(_SYSTEM_POWER_STATUS_EX2)); UInt32 result = GetSystemPowerStatusEx2(ptr, pwrStatSize, 0); if (result == 0) { return(-300); } // Failure // native call succeeded, marshal native data to our managed data pwrStat = (_SYSTEM_POWER_STATUS_EX2)Marshal.PtrToStructure(ptr, typeof(_SYSTEM_POWER_STATUS_EX2)); if (pwrStat.BatteryLifePercent == 0xFF) { return(-255); } // failure - BATTERY_PERCENTAGE_UNKNOWN if (pwrStat.ACLineStatus == 0x01) { return(-(Int32)pwrStat.BatteryLifePercent); } // OK, but running from AC return((Int32)pwrStat.BatteryLifePercent); }
public static Int32 GetBatteryStatus() { _SYSTEM_POWER_STATUS_EX2 pwrStat; // allocate the necessary memory on the native side. We have a class (_SYSTEM_POWER_STATUS_EX2) that // has the same memory layout as its native counterpart IntPtr ptr = Utils.LocalAlloc(Marshal.SizeOf(typeof(_SYSTEM_POWER_STATUS_EX2))); // fill in the required fields pwrStat = new _SYSTEM_POWER_STATUS_EX2(); UInt32 pwrStatSize = (UInt32)Marshal.SizeOf(typeof(_SYSTEM_POWER_STATUS_EX2)); UInt32 result = GetSystemPowerStatusEx2(ptr, pwrStatSize, 0); if (result == 0) { return -300; } // Failure // native call succeeded, marshal native data to our managed data pwrStat = (_SYSTEM_POWER_STATUS_EX2)Marshal.PtrToStructure(ptr, typeof(_SYSTEM_POWER_STATUS_EX2)); if (pwrStat.BatteryLifePercent == 0xFF) { return -255; } // failure - BATTERY_PERCENTAGE_UNKNOWN if (pwrStat.ACLineStatus == 0x01) { return -(Int32)pwrStat.BatteryLifePercent; } // OK, but running from AC return (Int32)pwrStat.BatteryLifePercent; }