From 178cb0400261e12522664c338563c582f6e06dc8 Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Wed, 30 Aug 2023 12:45:07 +0200 Subject: [PATCH] Turn off display fix https://github.com/seerge/g-helper/issues/1218 Zephyrus DUO Screenpad hotkey https://github.com/seerge/g-helper/issues/1215 --- app/Input/InputDispatcher.cs | 31 +++++++++++++++++++++++++------ app/NativeMethods.cs | 4 ++-- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/app/Input/InputDispatcher.cs b/app/Input/InputDispatcher.cs index dbce05f8..8fec9cd2 100644 --- a/app/Input/InputDispatcher.cs +++ b/app/Input/InputDispatcher.cs @@ -355,7 +355,7 @@ namespace GHelper.Input break; case "screen": Logger.WriteLine("Screen off toggle"); - NativeMethods.TurnOffScreen(Program.settingsForm.Handle); + NativeMethods.TurnOffScreen(); break; case "miniled": screenControl.ToogleMiniled(); @@ -506,7 +506,7 @@ namespace GHelper.Input SetBacklight(4); return; case 53: // FN+F6 on GA-502DU model - NativeMethods.TurnOffScreen(Program.settingsForm.Handle); + NativeMethods.TurnOffScreen(); return; } } @@ -537,6 +537,11 @@ namespace GHelper.Input case 108: // FN+F11 Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.KB_Sleep, "Sleep"); break; + case 106: // Screenpad button on DUO + SetScreenpad(100); + break; + + } } @@ -594,14 +599,28 @@ namespace GHelper.Input public static void SetScreenpad(int delta) { int brightness = AppConfig.Get("screenpad", 100); - brightness = Math.Max(Math.Min(100, brightness + delta), 0); + + if (delta == 100) + { + if (brightness < 0) brightness = 0; + else if (brightness < 100) brightness = 100; + else brightness = -10; + + } else + { + brightness = Math.Max(Math.Min(100, brightness + delta), -10); + } AppConfig.Set("screenpad", brightness); - Program.acpi.DeviceSet(AsusACPI.ScreenPadBrightness, (brightness * 255 / 100), "Screenpad"); - if (brightness == 0) Program.acpi.DeviceSet(AsusACPI.ScreenPadToggle, brightness, "ScreenpadToggle"); + Program.acpi.DeviceSet(AsusACPI.ScreenPadBrightness, Math.Min(brightness * 255 / 100, 0 ), "Screenpad"); + if (brightness < 0) Program.acpi.DeviceSet(AsusACPI.ScreenPadToggle, brightness, "ScreenpadToggle"); - Program.toast.RunToast($"Screen Pad {brightness}", delta > 0 ? ToastIcon.BrightnessUp : ToastIcon.BrightnessDown); + string toast; + + if (brightness < 0) toast = "Off"; else toast = brightness.ToString() + "%"; + + Program.toast.RunToast($"Screen Pad {toast}", delta > 0 ? ToastIcon.BrightnessUp : ToastIcon.BrightnessDown); } diff --git a/app/NativeMethods.cs b/app/NativeMethods.cs index 0b79204f..f821779b 100644 --- a/app/NativeMethods.cs +++ b/app/NativeMethods.cs @@ -32,9 +32,9 @@ public class NativeMethods [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern uint FormatMessage(uint dwFlags, IntPtr lpSource, uint dwMessageId, uint dwLanguageId, out string lpBuffer, uint nSize, IntPtr Arguments); - public static void TurnOffScreen(IntPtr handle) + public static void TurnOffScreen() { - IntPtr result = SendMessage(handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)MONITOR_OFF); + IntPtr result = SendMessage(-1, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)MONITOR_OFF); if (result == IntPtr.Zero) { int error = Marshal.GetLastWin32Error();