diff --git a/app/NativeMethods.cs b/app/NativeMethods.cs index f821779b..9cc4ddde 100644 --- a/app/NativeMethods.cs +++ b/app/NativeMethods.cs @@ -73,36 +73,38 @@ public class NativeMethods public class PowerSettingGuid { // 0=Powered by AC, 1=Powered by Battery, 2=Powered by short-term source (UPC) - public Guid AcdcPowerSource { get; } = new Guid("5d3e9a59-e9D5-4b00-a6bd-ff34ff516548"); + public static Guid AcdcPowerSource { get; } = new Guid("5d3e9a59-e9D5-4b00-a6bd-ff34ff516548"); // POWERBROADCAST_SETTING.Data = 1-100 - public Guid BatteryPercentageRemaining { get; } = new Guid("a7ad8041-b45a-4cae-87a3-eecbb468a9e1"); + public static Guid BatteryPercentageRemaining { get; } = new Guid("a7ad8041-b45a-4cae-87a3-eecbb468a9e1"); // Windows 8+: 0=Monitor Off, 1=Monitor On, 2=Monitor Dimmed - public Guid ConsoleDisplayState { get; } = new Guid("6fe69556-704a-47a0-8f24-c28d936fda47"); + public static Guid ConsoleDisplayState { get; } = new Guid("6fe69556-704a-47a0-8f24-c28d936fda47"); // Windows 8+, Session 0 enabled: 0=User providing Input, 2=User Idle - public Guid GlobalUserPresence { get; } = new Guid("786E8A1D-B427-4344-9207-09E70BDCBEA9"); + public static Guid GlobalUserPresence { get; } = new Guid("786E8A1D-B427-4344-9207-09E70BDCBEA9"); // 0=Monitor Off, 1=Monitor On. - public Guid MonitorPowerGuid { get; } = new Guid("02731015-4510-4526-99e6-e5a17ebd1aea"); + public static Guid MonitorPowerGuid { get; } = new Guid("02731015-4510-4526-99e6-e5a17ebd1aea"); // 0=Battery Saver Off, 1=Battery Saver On. - public Guid PowerSavingStatus { get; } = new Guid("E00958C0-C213-4ACE-AC77-FECCED2EEEA5"); + public static Guid PowerSavingStatus { get; } = new Guid("E00958C0-C213-4ACE-AC77-FECCED2EEEA5"); // Windows 8+: 0=Off, 1=On, 2=Dimmed - public Guid SessionDisplayStatus { get; } = new Guid("2B84C20E-AD23-4ddf-93DB-05FFBD7EFCA5"); + public static Guid SessionDisplayStatus { get; } = new Guid("2B84C20E-AD23-4ddf-93DB-05FFBD7EFCA5"); // Windows 8+, no Session 0: 0=User providing Input, 2=User Idle - public Guid SessionUserPresence { get; } = new Guid("3C0F4548-C03F-4c4d-B9F2-237EDE686376"); + public static Guid SessionUserPresence { get; } = new Guid("3C0F4548-C03F-4c4d-B9F2-237EDE686376"); // 0=Exiting away mode 1=Entering away mode - public Guid SystemAwaymode { get; } = new Guid("98a7f580-01f7-48aa-9c0f-44352c29e5C0"); + public static Guid SystemAwaymode { get; } = new Guid("98a7f580-01f7-48aa-9c0f-44352c29e5C0"); /* Windows 8+ */ // POWERBROADCAST_SETTING.Data not used - public Guid IdleBackgroundTask { get; } = new Guid(0x515C31D8, 0xF734, 0x163D, 0xA0, 0xFD, 0x11, 0xA0, 0x8C, 0x91, 0xE8, 0xF1); + public static Guid IdleBackgroundTask { get; } = new Guid(0x515C31D8, 0xF734, 0x163D, 0xA0, 0xFD, 0x11, 0xA0, 0x8C, 0x91, 0xE8, 0xF1); - public Guid PowerSchemePersonality { get; } = new Guid(0x245D8541, 0x3943, 0x4422, 0xB0, 0x25, 0x13, 0xA7, 0x84, 0xF6, 0x79, 0xB7); + public static Guid PowerSchemePersonality { get; } = new Guid(0x245D8541, 0x3943, 0x4422, 0xB0, 0x25, 0x13, 0xA7, 0x84, 0xF6, 0x79, 0xB7); // The Following 3 Guids are the POWERBROADCAST_SETTING.Data result of PowerSchemePersonality - public Guid MinPowerSavings { get; } = new Guid("8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c"); - public Guid MaxPowerSavings { get; } = new Guid("a1841308-3541-4fab-bc81-f71556f20b4a"); - public Guid TypicalPowerSavings { get; } = new Guid("381b4222-f694-41f0-9685-ff5bb260df2e"); + public static Guid MinPowerSavings { get; } = new Guid("8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c"); + public static Guid MaxPowerSavings { get; } = new Guid("a1841308-3541-4fab-bc81-f71556f20b4a"); + public static Guid TypicalPowerSavings { get; } = new Guid("381b4222-f694-41f0-9685-ff5bb260df2e"); + + public static Guid LIDSWITCH_STATE_CHANGE = new Guid("ba3e0f4d-b817-4094-a2d1-d56379e6a0f3"); } diff --git a/app/Program.cs b/app/Program.cs index 4cee9ad4..4c489fe1 100644 --- a/app/Program.cs +++ b/app/Program.cs @@ -37,7 +37,7 @@ namespace GHelper public static ToastForm toast = new ToastForm(); - public static IntPtr unRegPowerNotify; + public static IntPtr unRegPowerNotify, unRegPowerNotifyLid; private static long lastAuto; private static long lastTheme; @@ -110,8 +110,8 @@ namespace GHelper clamshellControl.ToggleLidAction(); // Subscribing for monitor power on events - PowerSettingGuid settingGuid = new NativeMethods.PowerSettingGuid(); - unRegPowerNotify = NativeMethods.RegisterPowerSettingNotification(settingsForm.Handle, settingGuid.ConsoleDisplayState, NativeMethods.DEVICE_NOTIFY_WINDOW_HANDLE); + unRegPowerNotify = NativeMethods.RegisterPowerSettingNotification(settingsForm.Handle, PowerSettingGuid.ConsoleDisplayState, NativeMethods.DEVICE_NOTIFY_WINDOW_HANDLE); + unRegPowerNotifyLid = NativeMethods.RegisterPowerSettingNotification(settingsForm.Handle, PowerSettingGuid.LIDSWITCH_STATE_CHANGE, NativeMethods.DEVICE_NOTIFY_WINDOW_HANDLE); Task task = Task.Run((Action)PeripheralsProvider.DetectAllAsusMice); @@ -303,6 +303,7 @@ namespace GHelper PeripheralsProvider.UnregisterForDeviceEvents(); clamshellControl.UnregisterDisplayEvents(); NativeMethods.UnregisterPowerSettingNotification(unRegPowerNotify); + NativeMethods.UnregisterPowerSettingNotification(unRegPowerNotifyLid); Application.Exit(); } diff --git a/app/Settings.cs b/app/Settings.cs index 1b048c89..c2223ee1 100644 --- a/app/Settings.cs +++ b/app/Settings.cs @@ -15,6 +15,7 @@ using GHelper.USB; using System; using System.Diagnostics; using System.Timers; +using static NativeMethods; namespace GHelper { @@ -431,29 +432,42 @@ namespace GHelper protected override void WndProc(ref Message m) { - switch (m.Msg) + if (m.Msg == NativeMethods.WM_POWERBROADCAST && m.WParam == (IntPtr)NativeMethods.PBT_POWERSETTINGCHANGE) { - case NativeMethods.WM_POWERBROADCAST: - if (m.WParam == (IntPtr)NativeMethods.PBT_POWERSETTINGCHANGE) + var settings = (NativeMethods.POWERBROADCAST_SETTING)m.GetLParam(typeof(NativeMethods.POWERBROADCAST_SETTING)); + if (settings.PowerSetting == PowerSettingGuid.LIDSWITCH_STATE_CHANGE) + { + switch (settings.Data) { - var settings = (NativeMethods.POWERBROADCAST_SETTING)m.GetLParam(typeof(NativeMethods.POWERBROADCAST_SETTING)); - switch (settings.Data) - { - case 0: - Logger.WriteLine("Monitor Power Off"); - Aura.ApplyBrightness(0); - break; - case 1: - Logger.WriteLine("Monitor Power On"); - Program.SetAutoModes(); - break; - case 2: - Logger.WriteLine("Monitor Dimmed"); - break; - } + case 0: + Logger.WriteLine("Lid Closed"); + Aura.ApplyBrightness(0, "Lid"); + break; + case 1: + Logger.WriteLine("Lid Open"); + Aura.ApplyBrightness(InputDispatcher.GetBacklight(), "Lid"); + break; } - m.Result = (IntPtr)1; - break; + + } + else + { + switch (settings.Data) + { + case 0: + Logger.WriteLine("Monitor Power Off"); + Aura.ApplyBrightness(0); + break; + case 1: + Logger.WriteLine("Monitor Power On"); + Program.SetAutoModes(); + break; + case 2: + Logger.WriteLine("Monitor Dimmed"); + break; + } + } + m.Result = (IntPtr)1; } try