From 89244a6d4da30b87521fab729b3aea2249074b6a Mon Sep 17 00:00:00 2001 From: Shatyuka Date: Sun, 12 Jan 2025 20:34:58 +0800 Subject: [PATCH 1/2] Show current progress in taskbar --- .../Classes/Helper/WindowUtility.cs | 10 ++++ .../Classes/Interfaces/Class/ProgressBase.cs | 46 ++++++++++++++++++- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/CollapseLauncher/Classes/Helper/WindowUtility.cs b/CollapseLauncher/Classes/Helper/WindowUtility.cs index d7ae4be68..b4ed9e75e 100644 --- a/CollapseLauncher/Classes/Helper/WindowUtility.cs +++ b/CollapseLauncher/Classes/Helper/WindowUtility.cs @@ -885,6 +885,16 @@ public static int SetProgressValue(nint hwnd, ulong completed, ulong total) { return Taskbar.SetProgressValue(hwnd, completed, total); } + + public static int SetTaskBarState(TaskbarState state) + { + return Taskbar.SetProgressState(CurrentWindowPtr, state); + } + + public static int SetProgressValue(ulong completed, ulong total) + { + return Taskbar.SetProgressValue(CurrentWindowPtr, completed, total); + } #endregion } } diff --git a/CollapseLauncher/Classes/Interfaces/Class/ProgressBase.cs b/CollapseLauncher/Classes/Interfaces/Class/ProgressBase.cs index cdeea522e..f010cf615 100644 --- a/CollapseLauncher/Classes/Interfaces/Class/ProgressBase.cs +++ b/CollapseLauncher/Classes/Interfaces/Class/ProgressBase.cs @@ -27,6 +27,7 @@ using System.Threading; using System.Threading.Tasks; using Hi3Helper.SentryHelper; +using Hi3Helper.Win32.TaskbarListCOM; using static Hi3Helper.Locale; using static Hi3Helper.Logger; using CollapseUIExtension = CollapseLauncher.Extension.UIElementExtensions; @@ -446,6 +447,21 @@ protected void UpdateSophonFileTotalProgress(long read) // Update progress ProgressChanged?.Invoke(this, _sophonProgress); + + // Update taskbar progress + if (_status.IsProgressAllIndetermined) + { + WindowUtility.SetTaskBarState(TaskbarState.Indeterminate); + } + else if (_status.IsCompleted || _status.IsCanceled) + { + WindowUtility.SetTaskBarState(TaskbarState.NoProgress); + } + else + { + WindowUtility.SetTaskBarState(TaskbarState.Normal); + WindowUtility.SetProgressValue((ulong)(_sophonProgress.ProgressAllPercentage * 10), 1000); + } } protected void UpdateSophonFileDownloadProgress(long downloadedWrite, long currentWrite) @@ -1334,8 +1350,34 @@ protected void UpdateAll() UpdateProgress(); } - protected virtual void UpdateProgress() => ProgressChanged?.Invoke(this, _progress); - protected virtual void UpdateStatus() => StatusChanged?.Invoke(this, _status); + protected virtual void UpdateProgress() + { + ProgressChanged?.Invoke(this, _progress); + + if (_status is {IsProgressAllIndetermined: false, IsCompleted: false, IsCanceled: false}) + { + WindowUtility.SetProgressValue((ulong)(_progress.ProgressAllPercentage * 10), 1000); + } + } + + protected virtual void UpdateStatus() + { + StatusChanged?.Invoke(this, _status); + + if (_status.IsProgressAllIndetermined) + { + WindowUtility.SetTaskBarState(TaskbarState.Indeterminate); + } + else if (_status.IsCompleted || _status.IsCanceled) + { + WindowUtility.SetTaskBarState(TaskbarState.NoProgress); + } + else + { + WindowUtility.SetTaskBarState(TaskbarState.Normal); + } + } + #endregion } } From 121bc98675b03a2506c3247b4c898b1d522255f1 Mon Sep 17 00:00:00 2001 From: shatyuka Date: Mon, 13 Jan 2025 15:09:33 +0800 Subject: [PATCH 2/2] Try catch TaskbarList --- Hi3Helper.Win32 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Hi3Helper.Win32 b/Hi3Helper.Win32 index f47b53f0d..b62180e69 160000 --- a/Hi3Helper.Win32 +++ b/Hi3Helper.Win32 @@ -1 +1 @@ -Subproject commit f47b53f0d4affbc7a9bccaf6dc7f095f7c7e98f5 +Subproject commit b62180e69319c29b5dba34c8e57f8692087c6429