From 0c982a47f4be7cadcbd93bce7c0adf100b789742 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B9=E6=B0=B4=E6=98=8E=E6=9C=88?= Date: Sun, 5 Oct 2025 13:43:28 +0800 Subject: [PATCH 1/2] fix: tray icon disappears after explorer restart --- packages/tray_manager/windows/tray_manager_plugin.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/tray_manager/windows/tray_manager_plugin.cpp b/packages/tray_manager/windows/tray_manager_plugin.cpp index e3ff055..61e3f74 100644 --- a/packages/tray_manager/windows/tray_manager_plugin.cpp +++ b/packages/tray_manager/windows/tray_manager_plugin.cpp @@ -261,10 +261,21 @@ void TrayManagerPlugin::_ApplyIcon() { if (tray_icon_setted) { Shell_NotifyIcon(NIM_MODIFY, &nid); } else { + HICON hIconBackup = nid.hIcon; + WCHAR szTipBackup[128]; + StringCchCopy(szTipBackup, _countof(szTipBackup), nid.szTip); + + ZeroMemory(&nid, sizeof(NOTIFYICONDATA)); nid.cbSize = sizeof(NOTIFYICONDATA); nid.hWnd = GetMainWindow(); + nid.uID = 1; + nid.hIcon = hIconBackup; + StringCchCopy(nid.szTip, _countof(nid.szTip), szTipBackup); nid.uCallbackMessage = WM_MYMESSAGE; nid.uFlags = NIF_MESSAGE | NIF_ICON; + if (nid.szTip[0] != '\0') { + nid.uFlags |= NIF_TIP; + } Shell_NotifyIcon(NIM_ADD, &nid); } From 3b0a1e2c867aaa270646b2daa5369530b4754f90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B9=E6=B0=B4=E6=98=8E=E6=9C=88?= Date: Sun, 5 Oct 2025 13:59:11 +0800 Subject: [PATCH 2/2] fix --- .../tray_manager/windows/tray_manager_plugin.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/tray_manager/windows/tray_manager_plugin.cpp b/packages/tray_manager/windows/tray_manager_plugin.cpp index 61e3f74..59e98d6 100644 --- a/packages/tray_manager/windows/tray_manager_plugin.cpp +++ b/packages/tray_manager/windows/tray_manager_plugin.cpp @@ -214,6 +214,21 @@ std::optional TrayManagerPlugin::HandleWindowProc(HWND hWnd, tray_icon_setted = false; _ApplyIcon(); } + } else if (message == WM_POWERBROADCAST) { + // Handle power management events (sleep/wake) + switch (wParam) { + case PBT_APMRESUMEAUTOMATIC: + case PBT_APMRESUMESUSPEND: + // System is resuming from sleep/hibernation + if (tray_icon_setted) { + // Restore the tray icon after system wakes up + tray_icon_setted = false; + _ApplyIcon(); + } + break; + default: + break; + } } return result; }