Emulate niri-style per-monitor focus behavior on Windows
True Recall is a lightweight background utility that adds per-monitor focus memory to Windows, making multi-monitor workflows more efficient and predictable.
β¨ Per-Monitor Focus Memory - Each monitor remembers its last active window
β¨οΈ Hotkey-Based Switching - Instantly jump between monitors (default: Alt+N)
π±οΈ Mouse Cursor Movement - Cursor follows you to the target monitor (optional)
π§ Customizable - Edit true-recall.ini to configure hotkeys and behavior
π‘οΈ Conflict Detection - Warns if hotkeys conflict with Windows system shortcuts
π» System Tray - Runs silently in the background with tray icon
πͺΆ Lightweight - minimal CPU/memory usage
- Download
true-recall.exefrom the latest release - Place it anywhere you like (Desktop, Program Files, etc.)
- Double-click to run
- Look for the True Recall icon in your system tray
- Use the default hotkey Alt+N to cycle between monitors
That's it! The config file (true-recall.ini) is created automatically on first run.
- Open applications on different monitors
- Work naturally, switching focus between windows
- Press Alt+N to jump to the next monitor
- True Recall automatically focuses the last active window on that monitor
- (Optional) Mouse cursor moves to the target monitor automatically
Edit true-recall.ini (created in the same folder as true-recall.exe):
; True Recall Configuration File
;
; Hotkey format: Modifier+Modifier+Key
; Modifiers: Ctrl, Alt, Shift, Win
; Keys: A-Z, 0-9, F1-F12
CycleMonitorHotkey=Alt+N
; Move mouse cursor to the monitor when switching
; Set to true or false
MoveMouseToMonitor=trueHotkey Examples:
Alt+M- Simple Alt+Key combinationCtrl+Alt+M- Different letterWin+Shift+F1- Use Win key with F1Ctrl+Shift+9- Use a number key
Mouse Cursor Movement:
MoveMouseToMonitor=true- Cursor moves to center of target monitor (default)MoveMouseToMonitor=false- Cursor stays in place
Note: After editing true-recall.ini, restart True Recall for changes to take effect.
- Windows 10 or later
- Visual Studio 2022 (or Build Tools)
- CMake 3.15+
# Clone or download the repository
cd true-recall
# Create build directory
mkdir build
cd build
# Configure with CMake
cmake ..
# Build Release version (no console, GUI tray app)
cmake --build . --config Release
# The executable will be at: build/Release/true-recall.exe- Release: GUI mode (no console window), system tray only
- Debug: Console window for debugging output
- Press
Win+R - Type
shell:startupand press Enter - Copy
true-recall.exeto this folder - Done! True Recall will start on every login
- Open Task Scheduler
- Create Basic Task
- Name: "True Recall"
- Trigger: "When I log on"
- Action: "Start a program"
- Program: Browse to
true-recall.exe - Finish
True Recall uses Windows accessibility hooks to track focus changes:
- EVENT_SYSTEM_FOREGROUND - Tracks when windows gain focus
- EVENT_OBJECT_DESTROY - Cleans up when windows are closed
- RegisterHotKey - Captures global hotkey presses
- System Tray - Provides GUI presence and exit menu
Each monitor maintains a focus stack (MRU - Most Recently Used):
- Stack size limited to 10 windows per monitor
- Automatic cleanup of closed/invalid windows
- Window validation before activation
3-tier activation strategy for maximum reliability:
- Direct -
SetForegroundWindow() - AttachThreadInput - Workaround for cross-thread focus
- Fallback -
BringWindowToTop()+SetFocus()
These are Windows API limitations, not bugs:
- Some apps resist focus - UWP apps, elevated apps may not cooperate
- SetForegroundWindow restrictions - Windows security policy may prevent focus theft
- No virtual desktop support - Tracks physical monitors only
- Fullscreen exclusive games - May not work correctly
All limitations are expected and accepted per the design philosophy.
Solution: Edit true-recall.ini to use a different hotkey, then restart True Recall. Avoid common Windows hotkeys (Win+D, Win+L, Alt+Tab, etc.)
Solution: Choose a different key combination that's not already in use by Windows or another application.
This is expected for some apps (UWP, elevated processes) due to Windows security restrictions.
Set MoveMouseToMonitor=true in true-recall.ini and restart True Recall.
Restart True Recall. If the issue persists, check Windows Event Viewer for errors.
- Right-click the True Recall tray icon
- Click "Exit"
- Delete
true-recall.exeandtrue-recall.ini - If added to Startup folder, remove it from there too
true-recall/
βββ true-recall.exe # Main executable
βββ true-recall.ini # Configuration file (auto-created)
βββ README.md # User documentation
βββ BUILDING.md # Build and distribution guide
βββ CHANGELOG.md # Version history
βββ LICENSE # MIT License
- Runtime: None (fully self-contained)
- Build-time: Windows SDK, CMake, MSVC
Minimal. Direct. Pragmatic.
- Focus on solving one problem well
- Stable over clever
- Silent failure over wrong behavior
- Best-effort within Windows limitations
This is a personal-use utility that became shareable, not enterprise software.
MIT License - See LICENSE file
Inspired by niri Wayland compositor's per-monitor focus model.
See CHANGELOG.md for detailed version history and changes.
- Check this README and CHANGELOG.md first
- See BUILDING.md for build instructions
- Report bugs via GitHub Issues
Made with β€οΈ for better multi-monitor workflows on Windows
Current version: 1.1