From c92086f115c36c0a50535c0b7acee3033a0adace Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=9E=E7=81=B0=E4=B9=9F?= Date: Sun, 31 Jul 2022 22:33:34 +0800 Subject: [PATCH 1/6] Update EnergyManager.cs --- EnergyStar/EnergyManager.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/EnergyStar/EnergyManager.cs b/EnergyStar/EnergyManager.cs index 0b93002..62666c2 100644 --- a/EnergyStar/EnergyManager.cs +++ b/EnergyStar/EnergyManager.cs @@ -184,5 +184,19 @@ public static void ThrottleAllUserBackgroundProcesses() Win32Api.CloseHandle(hProcess); } } + public static void RecoverAllUserProcesses() + { + var runningProcesses = Process.GetProcesses(); + var currentSessionID = Process.GetCurrentProcess().SessionId; + + var sameAsThisSession = runningProcesses.Where(p => p.SessionId == currentSessionID); + foreach (var proc in sameAsThisSession) + { + if (BypassProcessList.Contains($"{proc.ProcessName}.exe".ToLowerInvariant())) continue; + var hProcess = Win32Api.OpenProcess((uint)Win32Api.ProcessAccessFlags.SetInformation, false, (uint) proc.Id); + ToggleEfficiencyMode(hProcess, false); + Win32Api.CloseHandle(hProcess); + } + } } } From 647f6a644ec20279234c841103fa9a09cfb3ae93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=9E=E7=81=B0=E4=B9=9F?= Date: Sun, 31 Jul 2022 22:35:05 +0800 Subject: [PATCH 2/6] Update Program.cs --- EnergyStar/Program.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/EnergyStar/Program.cs b/EnergyStar/Program.cs index 6f791a4..14abd2a 100644 --- a/EnergyStar/Program.cs +++ b/EnergyStar/Program.cs @@ -61,6 +61,7 @@ static void Main(string[] args) cts.Cancel(); HookManager.UnsubscribeWindowEvents(); + EnergyManager.RecoverAllUserProcesses(); } } } From 49a21a47922c991dc4ade150815282204b4339ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=9E=E7=81=B0=E4=B9=9F?= Date: Sun, 31 Jul 2022 23:48:10 +0800 Subject: [PATCH 3/6] Update Program.cs --- EnergyStar/Program.cs | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/EnergyStar/Program.cs b/EnergyStar/Program.cs index 14abd2a..062c931 100644 --- a/EnergyStar/Program.cs +++ b/EnergyStar/Program.cs @@ -1,9 +1,21 @@ -using EnergyStar.Interop; +using EnergyStar.Interop; +using System.Runtime.InteropServices; namespace EnergyStar { internal class Program { + public delegate bool ConsoleCtrlDelegate(int CtrlType); + [DllImport("kernel32.dll")] + private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate handlerRoutine, bool add); + static bool HandlerRoutine(int ctrlType) + { + cts.Cancel(); + HookManager.UnsubscribeWindowEvents(); + EnergyManager.RecoverAllUserProcesses(); + return true; + } + static CancellationTokenSource cts = new CancellationTokenSource(); static async void HouseKeepingThreadProc() @@ -26,6 +38,7 @@ static async void HouseKeepingThreadProc() static void Main(string[] args) { + SetConsoleCtrlHandler(new ConsoleCtrlDelegate(HandlerRoutine), true); // Well, this program only works for Windows Version starting with Cobalt... // Nickel or higher will be better, but at least it works in Cobalt // @@ -48,20 +61,10 @@ static void Main(string[] args) { if (Event.GetMessage(out Win32WindowForegroundMessage msg, IntPtr.Zero, 0, 0)) { - if (msg.Message == Event.WM_QUIT) - { - cts.Cancel(); - break; - } - Event.TranslateMessage(ref msg); Event.DispatchMessage(ref msg); } } - - cts.Cancel(); - HookManager.UnsubscribeWindowEvents(); - EnergyManager.RecoverAllUserProcesses(); } } } From d3f4ec6bac5a6821504d99e4c7c4be3764e74dd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=9E=E7=81=B0=E4=B9=9F?= Date: Sun, 31 Jul 2022 23:49:32 +0800 Subject: [PATCH 4/6] Update Program.cs --- EnergyStar/Program.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/EnergyStar/Program.cs b/EnergyStar/Program.cs index 062c931..d7b6f3e 100644 --- a/EnergyStar/Program.cs +++ b/EnergyStar/Program.cs @@ -39,6 +39,7 @@ static async void HouseKeepingThreadProc() static void Main(string[] args) { SetConsoleCtrlHandler(new ConsoleCtrlDelegate(HandlerRoutine), true); + // Well, this program only works for Windows Version starting with Cobalt... // Nickel or higher will be better, but at least it works in Cobalt // From d5bb0014f0eca7edfa6cc6e636d94507f194aa72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=9E=E7=81=B0=E4=B9=9F?= Date: Sun, 31 Jul 2022 23:52:27 +0800 Subject: [PATCH 5/6] Update Program.cs --- EnergyStar/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EnergyStar/Program.cs b/EnergyStar/Program.cs index d7b6f3e..f51900f 100644 --- a/EnergyStar/Program.cs +++ b/EnergyStar/Program.cs @@ -29,7 +29,7 @@ static async void HouseKeepingThreadProc() await houseKeepingTimer.WaitForNextTickAsync(cts.Token); EnergyManager.ThrottleAllUserBackgroundProcesses(); } - catch (TaskCanceledException) + catch (OperationCanceledException) { break; } From 781af09f9713df780f43ce05eb0b53f52769ea14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=9E=E7=81=B0=E4=B9=9F?= Date: Mon, 1 Aug 2022 00:01:01 +0800 Subject: [PATCH 6/6] Update Program.cs --- EnergyStar/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EnergyStar/Program.cs b/EnergyStar/Program.cs index f51900f..14508cb 100644 --- a/EnergyStar/Program.cs +++ b/EnergyStar/Program.cs @@ -13,7 +13,7 @@ static bool HandlerRoutine(int ctrlType) cts.Cancel(); HookManager.UnsubscribeWindowEvents(); EnergyManager.RecoverAllUserProcesses(); - return true; + return false; } static CancellationTokenSource cts = new CancellationTokenSource();