Detect Battery Saver state

This commit is contained in:
Serge
2023-09-18 13:45:12 +02:00
parent 3bd59a4c4d
commit 524b84fc38
5 changed files with 67 additions and 7 deletions

View File

@@ -77,8 +77,12 @@ namespace GHelper.Display
int overdrive = Program.acpi.DeviceGet(AsusACPI.ScreenOverdrive); int overdrive = Program.acpi.DeviceGet(AsusACPI.ScreenOverdrive);
int miniled = Program.acpi.DeviceGet(AsusACPI.ScreenMiniled); int miniled = Program.acpi.DeviceGet(AsusACPI.ScreenMiniled);
bool hdr = false;
if (miniled >= 0) if (miniled >= 0)
{
AppConfig.Set("miniled", miniled); AppConfig.Set("miniled", miniled);
}
bool screenEnabled = (frequency >= 0); bool screenEnabled = (frequency >= 0);
@@ -94,7 +98,8 @@ namespace GHelper.Display
maxFrequency: maxFrequency, maxFrequency: maxFrequency,
overdrive: overdrive, overdrive: overdrive,
overdriveSetting: overdriveSetting, overdriveSetting: overdriveSetting,
miniled: miniled miniled: miniled,
hdr: hdr
); );
}); });

View File

@@ -1,8 +1,6 @@
using Microsoft.VisualBasic.Logging; using System.Collections;
using System.Collections; using System.Diagnostics;
using System.Diagnostics.Metrics;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Windows.Forms;
using static GHelper.Display.ScreenInterrogatory; using static GHelper.Display.ScreenInterrogatory;
namespace GHelper.Display namespace GHelper.Display

View File

@@ -692,7 +692,14 @@ namespace GHelper
comboBoost.SelectedIndex = Math.Min(boost, comboBoost.Items.Count - 1); comboBoost.SelectedIndex = Math.Min(boost, comboBoost.Items.Count - 1);
string powerMode = PowerNative.GetPowerMode(); string powerMode = PowerNative.GetPowerMode();
comboPowerMode.SelectedValue = powerMode; bool batterySaver = PowerNative.GetBatterySaverStatus();
comboPowerMode.Enabled = !batterySaver;
if (batterySaver)
comboPowerMode.SelectedIndex = 0;
else
comboPowerMode.SelectedValue = powerMode;
} }

View File

@@ -153,6 +153,13 @@ namespace GHelper.Mode
Guid guidScheme = new Guid(scheme); Guid guidScheme = new Guid(scheme);
uint status = PowerGetEffectiveOverlayScheme(out Guid activeScheme); uint status = PowerGetEffectiveOverlayScheme(out Guid activeScheme);
if (GetBatterySaverStatus())
{
Logger.WriteLine("Battery Saver detected");
return;
}
if (status != 0 || activeScheme != guidScheme) if (status != 0 || activeScheme != guidScheme)
{ {
status = PowerSetActiveOverlayScheme(guidScheme); status = PowerSetActiveOverlayScheme(guidScheme);
@@ -288,6 +295,48 @@ namespace GHelper.Mode
Logger.WriteLine("Setting Hibernate after " + seconds + ": " + (hrAC == 0 ? "OK" : hrAC)); Logger.WriteLine("Setting Hibernate after " + seconds + ": " + (hrAC == 0 ? "OK" : hrAC));
} }
[DllImport("Kernel32")]
private static extern bool GetSystemPowerStatus(SystemPowerStatus sps);
public enum ACLineStatus : byte
{
Offline = 0, Online = 1, Unknown = 255
}
public enum BatteryFlag : byte
{
High = 1,
Low = 2,
Critical = 4,
Charging = 8,
NoSystemBattery = 128,
Unknown = 255
}
// Fields must mirror their unmanaged counterparts, in order
[StructLayout(LayoutKind.Sequential)]
public class SystemPowerStatus
{
public ACLineStatus ACLineStatus;
public BatteryFlag BatteryFlag;
public Byte BatteryLifePercent;
public Byte SystemStatusFlag;
public Int32 BatteryLifeTime;
public Int32 BatteryFullLifeTime;
}
public static bool GetBatterySaverStatus()
{
SystemPowerStatus sps = new SystemPowerStatus();
try
{
GetSystemPowerStatus(sps);
return (sps.SystemStatusFlag > 0);
} catch (Exception ex)
{
return false;
}
}
} }
} }

View File

@@ -758,7 +758,7 @@ namespace GHelper
public void VisualiseScreen(bool screenEnabled, bool screenAuto, int frequency, int maxFrequency, int overdrive, bool overdriveSetting, int miniled) public void VisualiseScreen(bool screenEnabled, bool screenAuto, int frequency, int maxFrequency, int overdrive, bool overdriveSetting, int miniled, bool hdr)
{ {
ButtonEnabled(button60Hz, screenEnabled); ButtonEnabled(button60Hz, screenEnabled);
@@ -800,6 +800,7 @@ namespace GHelper
if (miniled >= 0) if (miniled >= 0)
{ {
buttonMiniled.Activated = (miniled == 1); buttonMiniled.Activated = (miniled == 1);
buttonMiniled.Enabled = !hdr;
} }
else else
{ {