Skip to content

Releases: Layellie/StandbyAndTimer

v2.1.0 — Hotkeys, tray toggle, notification prefs, idle-only purge

Choose a tag to compare

@Layellie Layellie released this 28 Jun 11:31
7df8388

What's new

First minor bump under the "batch fixes, don't ship per-commit" cadence — bundles five user-visible features plus a card-layout refresh into one release instead of five interim builds.

Hotkeys

  • Ctrl+Alt+P — system-wide manual purge.
  • Ctrl+Alt+T — system-wide timer-resolution toggle.
  • Settings panel shows the active bindings (read-only for v2.1.0; rebind UI is parked for v2.2).

Tray behaviour

  • Single left-click toggles the window instead of always showing it. If the window is in the tray it surfaces with proper foreground promotion; if it's already visible it tucks back into the tray. Right-click → "Show" still always surfaces.

Notification preferences

  • Three independent checkboxes in Settings: purge balloons, timer-state balloons, game-detected balloons. Defaults stay ON so upgraded installs see no change unless the user opts out.

Idle-only auto-purge

  • New "Sadece boştayken / Only when idle" toggle with a minutes input, sitting above the AUTO PURGE master switch. When enabled, threshold-triggered purges fire only after the user has been idle for the configured window (default 5 min). Gaming/typing sessions aren't interrupted anymore.

Single-instance signal

  • Re-launching the .exe while it's already running no longer pops "already running". The second process signals the live instance via a named EventWaitHandle (with AllowSetForegroundWindow(ASFW_ANY) so the foreground promote isn't muted), then exits silently.

Memory card refresh

  • Bottom strip is now Total | Free | Purges, anchored left/center/right of each cell for proper visual rhythm. Purge count moved here from the Standby Purge card's header (× count chip dropped — it was asymmetric and pushed the title off-centre).
  • KPI block now sits vertically centred in the slack the sibling Standby Purge card forces on the row, so the box no longer has a dead band at the bottom.
  • clearable subtitle font 10 → 14 for legibility next to the 28pt KPI.

Settings panel

  • New NOTIFICATIONS and HOTKEYS sections between Theme and Backup. Row layout grew but the * Logs row absorbs the extra height — no outer scrollbar, version footer stays pinned at the bottom.

Installation

Download StandbyAndTimer_Setup_2.1.0.exe below and run it. Administrator rights are required (UAC will prompt).

Or via winget once the manifest is approved:

winget install Layellie.StandbyAndTimer

Integrity

SHA256: b69bd65d548dd8326fe5628d56daa1f13ef2da602d06d773f70a7669c3b0e5b6

The in-app update checker verifies this hash automatically.

v2.0.11 — No outer scrollbar on Settings panel

Choose a tag to compare

@Layellie Layellie released this 28 Jun 01:26
13b2dea

What's new

Fixes a regression introduced when the Logs viewer came back in v2.0.10: the Settings panel content was pushed past the available 564 px body area, so the outer ScrollViewer started showing a vertical bar.

Changes

  • Outer ScrollViewer removed from the Settings panel. The panel is now a single Grid that cannot overflow by design.
  • Logs viewer row sized *: it absorbs all leftover vertical space below the static settings rows. The log box keeps its own internal scrollbar for long log content.
  • Version footer is pinned at the bottom. If the upper rows ever grow (long UpdateStatus wrap, Download Update button visible), the * log row gives up its space first so the footer is never pushed off the bottom.
  • Spacers tightened along the column (top margin 16→12, several inter-row spacers shaved 2–8 px) to free ~50 px more for the log section without feeling cramped.

Installation

Download StandbyAndTimer_Setup_2.0.11.exe below and run it. Administrator rights are required (UAC will prompt).

Or via winget once the manifest is approved:

winget install Layellie.StandbyAndTimer

Integrity

SHA256: aff2b02d5e06a7f3ad2519227ec4a26210df635685d183e51074a74c52fecdcc

The in-app update checker verifies this hash automatically.

v2.0.10 — Compact in-panel logs viewer (modular)

Choose a tag to compare

@Layellie Layellie released this 28 Jun 01:06
2e91333

⚠️ Superseded by v2.0.11.
v2.0.8, v2.0.9, and v2.0.10 were rapid-iteration interim builds of the same Settings-panel refresh. Install v2.0.11 instead — it bundles every fix below plus the final scrollbar / logs-viewer layout.


What's new

Brings the in-app Logs viewer back, this time as a self-contained LogsViewerCard UserControl backed by a dedicated ILogTailReader service.

User-visible changes

  • Compact timestamps in the panel — HH:mm:ss instead of 2026-06-29 14:32:15.847, freeing 15 columns for the actual message body so it stops clipping off the right edge of the narrow Settings panel.
  • Word-wrap on long lines so the message stays on screen instead of disappearing past the right.
  • On-disk log.txt unchanged — still uses the full yyyy-MM-dd HH:mm:ss.fff format for archival use; Open Log Folder surfaces it untouched.

Under the hood

  • New Core/Interfaces/ILogTailReader.cs (one method, display-ready async tail).
  • New Services/Logging/LogTailReader.cs (async file IO, ring-buffer bounded memory, zero-allocation timestamp compaction via string.Concat(span, span)).
  • New Views/Cards/LogsViewerCard.xaml(.cs) — pure view in the established Cards/ pattern.
  • Services/Logger.cs is now writer-only; reader concerns moved out.
  • SettingsViewModel uses an Interlocked ticket counter for supersession instead of holding a CancellationTokenSource field, so the type stays non-Disposable.

Installation

Download StandbyAndTimer_Setup_2.0.10.exe below and run it. Administrator rights are required (UAC will prompt).

Or via winget once the manifest is approved:

winget install Layellie.StandbyAndTimer

Integrity

SHA256: 418348f4fc522c30290745a574fdcb2237149fa16ffb5a940d08e2b6557d55cb

The in-app update checker verifies this hash automatically.

v2.0.9 — Settings panel polish (logs out, dropdown readable, X hitbox)

Choose a tag to compare

@Layellie Layellie released this 28 Jun 00:33
3d9544d

⚠️ Superseded by v2.0.11.
v2.0.8, v2.0.9, and v2.0.10 were rapid-iteration interim builds of the same Settings-panel refresh. Install v2.0.11 instead — it bundles every fix below plus the final scrollbar / logs-viewer layout.


What's new

Three small Settings-panel quality fixes off the back of v2.0.8 hands-on testing.

Changes

  • Recent logs viewer removed — Open Log Folder is sufficient, the in-panel viewer added clutter without much real value over Notepad.
  • Theme / Language dropdowns are now readable. They used to fall through to WPF's default Aero ComboBox style, which paints the selection box white and ignores our Foreground setter — making the closed value effectively unreadable on both palettes. They now use a full custom ControlTemplate wired into our InputBg/InputFg/InputBorder brushes.
  • Settings ✕ close button hit-area: 26×26 → 30×30, with the header row's spacer trimmed by the same amount so nothing else on the panel shifts.

Installation

Download StandbyAndTimer_Setup_2.0.9.exe below and run it. Administrator rights are required (UAC will prompt).

Or via winget once the manifest is approved:

winget install Layellie.StandbyAndTimer

Integrity

SHA256: 6c4e565cbfc42a074e2f8038e058b21be944715596077d8e8cbd52f9154113ac

The in-app update checker verifies this hash automatically.

v2.0.8 — MainWindow split into 6 UserControls + title bar shift fix

Choose a tag to compare

@Layellie Layellie released this 28 Jun 00:14
207e27f

⚠️ Superseded by v2.0.11.
v2.0.8, v2.0.9, and v2.0.10 were rapid-iteration interim builds of the same Settings-panel refresh. Install v2.0.11 instead — it bundles every fix below plus the final scrollbar / logs-viewer layout.


What's new

Phase 2 of the modularization effort, plus a targeted layout fix for the title bar.

Refactor

  • MainWindow split into 6 focused UserControls under Views/Cards/: TitleBar, TimerCard, MemoryStatsCard, StandbyPurgeCard, GameModeCard, StatusBar. MainWindow.xaml is now a ~115-line shell that composes them.
  • Code-behind is restricted to the two cards that need it (TitleBar for window chrome, GameModeCard for drag-drop); events bubble up to the host so the rest stays pure MVVM.

Fix

  • Title bar no longer "grows upward" when the Settings panel opens. The title bar row is now locked to Height="36" (was Auto); previously the Settings panel's RowSpan="2" + VerticalAlignment="Stretch" was bleeding into row 0 and inflating the bar by a few pixels each toggle.

Installation

Download StandbyAndTimer_Setup_2.0.8.exe below and run it. Administrator rights are required (UAC will prompt).

Or via winget once the manifest is approved:

winget install Layellie.StandbyAndTimer

Integrity

SHA256: 75d2b61bbe9ac868a7f8181819bae970cadab0618d014e8cc336baa6d019e8dc

The in-app update checker verifies this hash automatically.

v2.0.7 — Settings panel UI polish

Choose a tag to compare

@Layellie Layellie released this 27 Jun 19:33
22e1cc8

What's fixed

Three reported UI bugs from v2.0.6 are gone:

Logs viewer is readable now

The "Recent logs" box used the same background color as the panel it was on (both SurfaceBg), so the box visually disappeared and the dimmed log text was unreadable. Now the box uses the darkest palette tone (AppBg) for visible contrast, and the text uses full foreground (AppFg) at 10.5 pt.

Refresh button no longer clips

The header row had the label and the Refresh button colliding because they shared a single Grid column. Switched to a proper two-column layout so the button reads clearly even in the narrow 270 px panel.

No more window/card shift on button click

Two layout shifts addressed:

  • Window-level: removed SizeToContent="Height" (which was reflowing the whole window every time inner content changed). Fixed Height=600 now.
  • Card-level: the Timer card's "TIMER LOCKED" success badge was using Visibility=Collapsed when off — appearing/disappearing made the card grow/shrink ~6 px every toggle. Reserved the row's height with MinHeight=24 so it stays put.

Plus an audit of every other Visibility=Collapsed binding in the app — all confirmed safe (modals, fixed-size containers, or intentional UX like the "Download & Install" button when an update is available).

Installation

  1. Download StandbyAndTimer_Setup_2.0.7.exe below.
  2. Run it (UAC prompt — Administrator required).
  3. Launch from the Start Menu.

Self-contained .NET 10 build, 72.2 MB.

Verification

SHA256: 1a2658205df56c0667eeddf706fed291333beb9acc496dd219f04751cfa5c70e

PowerShell:

(Get-FileHash StandbyAndTimer_Setup_2.0.7.exe -Algorithm SHA256).Hash

Full changelog

v2.0.6...v2.0.7

v2.0.6 — Onboarding, crash reporter, logs viewer, game auto-detect

Choose a tag to compare

@Layellie Layellie released this 27 Jun 19:10
b63f3e8

What's new

First-run wizard

A 30-second onboarding overlay shown only on the very first launch. Covers the three core moves: the Timer button, AUTO PURGE caveat (off by default for a reason), and the Game Mode drop zone. FirstRunCompleted persists alongside the other settings so it never reappears.

In-app crash reporter

If anything unhandled fires, you now see a real dialog instead of WPF's default fatal popup. The dialog has the full stack trace, a Copy details button, and an Open GitHub issue button that pre-fills the new-issue form with title, environment, and the (truncated) stack — one-click bug report.

Logs viewer in Settings

The Settings panel now shows the last 100 log lines inline. Auto-refreshes when you open the panel. Saves a trip to Explorer + Notepad when triaging.

Fullscreen game auto-detect

A new background service polls the foreground window every 3 seconds. When a window fully covers its monitor (classic or borderless fullscreen) and its process isn't already in your Game Mode list, you get a one-time-per-session tray balloon. Detection only — never auto-adds (could be a video player).

winget manifest

Three-file manifest set under winget-manifests/ for submission to microsoft/winget-pkgs. Once accepted, install via:

winget install Layellie.StandbyAndTimer

Plus housekeeping

  • README version table updated with v2.0.4 / v2.0.5 / v2.0.6 (some were missing).
  • NativeMethods gained the user32 window-query trio + MONITORINFO used by the detection service.
  • All native calls still funnel through Services/Native/NativeMethods.cs — no P/Invoke leakage elsewhere.

Installation

  1. Download StandbyAndTimer_Setup_2.0.6.exe below.
  2. Run it (UAC prompt — Administrator required).
  3. Launch from the Start Menu.

The installer is self-contained (.NET 10 bundled), 72.2 MB.

Verification

SHA256: 9b76742cb78c78df9c916ef7b893b284ee9917b8d2798ee8257bb3adc8d42b56

PowerShell:

(Get-FileHash StandbyAndTimer_Setup_2.0.6.exe -Algorithm SHA256).Hash

Full changelog

v2.0.5...v2.0.6

v2.0.5

Choose a tag to compare

@Layellie Layellie released this 26 Jun 21:58
b5a7e8b

v2.0.5 — Game Mode actually works now + internal cleanup

Critical fix

  • Game Mode now correctly opts game processes out of Win 11 EcoQoS throttling. SetProcessInformation was being called with the wrong PROCESS_INFORMATION_CLASS value (34 instead of 4), which silently returned ERROR_INVALID_PARAMETER and left IGNORE_TIMER_RESOLUTION unset. Games added to Game Mode in v2.0.0–v2.0.4 only got Priority + Affinity boosts; the 0.5 ms timer didn't reach them in the background. Fixed by both replacing the literal AND introducing NativeMethods.ProcessPowerThrottling = 4 as a named constant so the typo can't come back.

Quality-of-life improvements

  • Import Settings now applies live. No more "restart to apply" — values appear in the UI immediately after importing a JSON snapshot.
  • Removed dead code (MeasureActualResolutionMs and three unused P/Invoke declarations including timeBeginPeriod / timeEndPeriod).
  • Fixed AVRT handle leak in the timer activation path — every Activate/Deactivate cycle previously leaked one MMCSS handle and permanently boosted the dispatcher thread.
  • Faster threshold typing. Threshold textbox keystrokes no longer rebuild the GamePaths list.

Download

StandbyAndTimer_Setup_2.0.5.exe (72.2 MB, Windows 10 20H1+ / Windows 11, x64)

SHA256: b323f3346aaef1e6f4afc3b16339eb824c9b91970b4ca91164e27f3b3377f21d

v2.0.4

Choose a tag to compare

@Layellie Layellie released this 26 Jun 21:14
d667be1

v2.0.4 — Rock-solid 0.5 ms lock and opt-in AUTO PURGE

Highlights

  • Timer now actually stays locked at 0.500 ms. The self-heal watchdog runs on its own dedicated Thread (not the ThreadPool) registered as AVRT MMCSS "Pro Audio" with ThreadPriority.AboveNormal, ticking every 50 ms. Immune to both ThreadPool starvation and Windows 11 EcoQoS throttling — no more brief slips to 1 ms during gameplay.
  • AUTO PURGE master switch (Game Mode-style ON/OFF toggle) added to the STANDBY PURGE card.
  • Default thresholds dropped from 1024 MB → 0 MB. A fresh install no longer touches the standby list until the user explicitly opts in.

Auto-purge now requires three conditions

  1. AUTO PURGE toggle = ON
  2. Standby limit > 0 MB
  3. Free limit > 0 MB

Other

  • docs/screenshot.png refreshed with the new UI
  • Stale nested StandbyAndTimer/CLAUDE.md removed

Download

StandbyAndTimer_Setup_2.0.4.exe (72.2 MB, Windows 10 20H1+ / Windows 11, x64)

SHA256: 7e615d9bdafad278163c6be0a33a51fe27fa5bc33874af4407e6390e5cbf15f7

v2.0.3 - faster startup + update fix

Choose a tag to compare

@Layellie Layellie released this 26 Jun 14:10
c054591

Faster startup + accurate update checker.

What changed

  • Cold start cut from ~5.4 s to ~0.5 s. The 3 PerformanceCounter constructors used by MemoryMonitorService were blocking the UI thread for ~4.8 s during DI resolution. They now build lazily on the monitor loop thread, and the main window shows before ViewModel.InitializeAsync runs.
  • Update checker no longer fires false positives. ParseVersion(v2.0.2) returned Version(2,0,2) with Revision=-1, which compared as less than the matching assembly version 2,0,2,0, so the app reported a phantom new version. Normalised. Also added a default <Version>2.0.3</Version> to the csproj so dev/CI builds no longer report themselves as 1.0.0.0.
  • README screenshot refreshed to show the new lime/card UI.
  • .editorconfig added for consistent formatting across editors.

Installation

  1. Download StandbyAndTimer_Setup_2.0.3.exe below.
  2. Run the installer (UAC will prompt — Administrator privileges required).
  3. Launch from the Start Menu. Existing v2.0.x installs are upgraded in place.

SHA-256

SHA256: 8ed6c52dad2ffc0adba76c2b96a4feb3c55ad5335c9b7566aa150e491b27b89d