Dark Theme |
Bright Theme |
TrayZen is a Windows 10 tray icon laboratory in the form of a clean desktop utility.
It treats the notification area as a controllable system surface: measurable, reproducible, and customizable.
If your tray feels noisy, TrayZen helps you restore signal from clutter.
System trays usually grow without governance. TrayZen applies a simple idea:
- define icon visibility as a state model,
- apply deterministic rules to that state,
- let users switch contexts (work/gaming/focus) in one action.
In short: less visual entropy, more intentional UI.
Visibility Controlhide/show tray icons quicklyCustom Icon Replacementoverride icon visuals with.icoassetsZen Modeone-click or hotkey-based focus modeSmart Auto-Hideidle-based and foreground-aware hiding rulesIcon Groupingbatch operations through named groupsProfilessave/load/export/import full tray configurationsNative Tray PresenceTrayZen itself runs with tray icon + context menuMinimize to Trayclose-to-tray workflow for persistent background useTheme Systemdark/light Fluent-inspired UIGlobal Hotkeysconfigurable recorder-based shortcut input
TrayZen interacts with Windows Explorer's notification area toolbar:
Shell_TrayWnd -> TrayNotifyWnd -> SysPager -> ToolbarWindow32 (visible tray)
NotifyIconOverflowWindow -> ToolbarWindow32 (overflow tray)
Core techniques:
- P/Invoke-based window discovery (
FindWindowExW,SendMessageW) - cross-process memory access (
OpenProcess,ReadProcessMemory,WriteProcessMemory) - toolbar inspection (
TBBUTTON, embeddedTRAYDATA) - shell state updates (
Shell_NotifyIcon+ state flags)
This hybrid strategy balances compatibility (shell-level APIs) with deep control (toolbar-level interop).
.NET 10+WPFMVVMwithCommunityToolkit.MvvmMicrosoft.Extensions.DependencyInjectionfor compositionH.NotifyIcon.Wpffor TrayZen's own tray lifecycle- Win32 interop (
User32,Shell32,Kernel32)
src/TrayZen/
Native/ Win32 constants, structs, P/Invoke, tray interop
Models/ tray icon/profile/settings models
Services/ icon polling, profiles, settings, hotkeys, auto-hide
ViewModels/ state + command orchestration (MVVM)
Views/ XAML pages (Dashboard, Profiles, Settings)
Themes/ dark/light resources and control styles
Converters/ UI binding converters
- Windows 10 (recommended: 19041+)
- .NET 10 SDK
cd src/TrayZen
dotnet restore
dotnet build
dotnet runNote: some tray operations may require elevated permissions, depending on target processes and Explorer state.
- Deterministic behavior: operations should be predictable and reversible
- Minimal interface: fewer controls, clearer intent
- Separation of concerns: interop in
Native, policy inServices, UX inViewModels/Views - Fail-soft runtime: the app should remain usable even if a specific low-level operation fails
- improve reliability for edge-case tray hosts
- refine icon grouping into richer folder-like interactions
- ship MSIX packaging and broader test coverage
- document interoperability boundaries across Windows builds
Issues and PRs are welcome. Helpful contributions include:
- reproducible bug reports (Windows build + app steps + expected/actual behavior)
- stability fixes around Explorer/tray edge cases
- performance improvements in polling and UI updates
- tests and documentation polish
Released under the license in LICENSE.

