Unofficial Snap Layouts for Windows 10. Hover over a window's Maximize button for about 300 ms and a Windows 11-style menu appears with six layouts. Click a zone to snap the window there — no keyboard shortcuts and no FancyZones.
Unofficial project. Not affiliated with, sponsored by, or approved by Microsoft. Windows, Snap Layouts, and Snap Assist are trademarks of Microsoft Corporation. See NOTICE.md.
- Version: 1.4.0
- Platform: Windows 10 22H2 x64, .NET Framework 4.8
- Tested on: Windows 10 IoT Enterprise 22H2, build 19045.6456, 1920 × 1080, 100% DPI
- UI language: English
- Portable: no installer, no network access, no telemetry
Latest release: GitHub Releases
- SnapLayouts10.exe — portable app
- SnapLayouts10-1.4.0-portable.zip — app + documentation
- SnapLayouts10-1.4.0-source.zip — full source
- SHA256SUMS.txt — integrity
| Document | Contents |
|---|---|
| TESTING.md | environment, test steps, results, limitations |
| COMPATIBILITY.md | tested applications and known limitations |
| WINDOWS11-DESIGN.md | visual analysis of Windows 11 and design decisions |
| PUBLISHING-GITHUB.md | release and publication guide |
| CHANGELOG.md | version history |
| CONTRIBUTING.md | build, style, testing, pull requests |
| SECURITY.md | vulnerability reporting and privacy |
- Detects the Maximize button with
WM_NCHITTEST(HTMAXBUTTON), without global mouse hooks. - Shows the layout menu after 300 ms of pointer rest (configurable).
- Six layouts with 2, 3, or 4 zones, styled after Windows 11.
- Highlights the zone under the cursor and snaps on click.
- Works with the monitor under the cursor, per-monitor DPI, and physical coordinates.
- Compensates for invisible DWM window borders so snapped windows align visually.
- Opens a visual Snap Assist in the remaining zone with live window previews.
- Runs in the system tray with settings and optional automatic startup.
| # | Layout | Zones |
|---|---|---|
| 1 | 2 equal columns | 2 |
| 2 | 2 columns 70/30 | 2 |
| 3 | 3 equal columns | 3 |
| 4 | Left + 2 right | 3 |
| 5 | 4 quadrants | 4 |
| 6 | Large left + 3 right | 4 |
Layouts can be enabled or disabled individually in Settings.
- Copy
SnapLayouts10.exeto a permanent folder, for exampleC:\Users\<user>\AppData\Local\Programs\SnapLayouts10\. - Run
SnapLayouts10.exe. The app appears in the system tray. - Right-click the tray icon:
- Snap Layouts: enabled — toggle detection;
- Start with Windows: yes/no — manage the
HKCU\...\Runentry; - Settings... — delay, gap, Snap Assist, active layouts;
- About, Open data folder, Exit.
- Double-click the tray icon to open Settings.
Run with --settings to open Settings immediately. Run with --debug to enable detailed logging.
- Focus the window you want to snap (Notepad, Explorer, Chrome, etc.).
- Rest the pointer on the Maximize button for about 300 ms.
- Choose a zone in the flyout.
- The window moves to that zone. If Snap Assist is enabled, choose another window for the next
zone, or press
Esc.
The flyout closes when the pointer leaves it, when the target loses focus, or when the Maximize button is pressed. Hovering the Restore Down button of a maximized window works too; the window is restored before snapping.
Settings file: %APPDATA%\SnapLayouts10\settings.ini
enabled=1
hoverdelayms=300
gap=8
snapassist=1
startwithwindows=0
firstrun=0
layouts=1,1,1,1,1,1hoverdelayms— 200…700 ms in the UI (1000 ms maximum in the file).gap— gap between windows, 0…16 px in the UI.layouts— one1/0for each of the six layouts.
Log: %APPDATA%\SnapLayouts10\snap.log (automatic rotation at 256 KB).
A 40 ms timer:
- reads the pointer position (
GetCursorPos); - finds the window under the pointer (
WindowFromPoint+GetAncestor(GA_ROOT)); - verifies that it is the foreground window, visible, and has
WS_MAXIMIZEBOX; - sends
WM_NCHITTESTand checks forHTMAXBUTTON (9).
If the window does not respond within 80 ms, a fallback region in the top-right corner is used. No global mouse hook is installed, so the input thread is not blocked.
After 300 ms, the app computes the monitor work area (MonitorFromPoint + GetMonitorInfo) and
the target DPI (GetDpiForWindow). The flyout is a borderless, rounded, topmost window with
WS_EX_NOACTIVATE, so it does not steal focus. It opens below the Maximize button and flips above
when there is not enough room.
Layout previews are drawn directly on the panel, without card backgrounds, with large rounded zones and a settings gear. The background uses a blurred screen capture with an acrylic-style tint.
For each zone, the app computes a physical-pixel rectangle, restores maximized/minimized windows,
and calls SetWindowPos. The difference between GetWindowRect and
DWMWA_EXTENDED_FRAME_BOUNDS is compensated so invisible borders do not produce uneven gaps.
After the first snap, the selector opens inside the remaining zone. Each candidate window is
shown as a separate floating preview with a shadow, over a blurred wallpaper background. Previews
are rendered live with DWM (DwmRegisterThumbnail + DwmUpdateThumbnailProperties) and preserve
window aspect ratios. Click a preview to snap it; Esc or a click outside cancels. Up to six
windows are shown.
The work area, DPI, and flyout placement are computed for the monitor under the cursor. Snapping
uses the target monitor's work area. APIs such as GetDpiForWindow and MonitorFromPoint are
per-monitor aware, and the manifest declares PerMonitorV2.
Only components included in Windows 10 are required:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe- .NET Framework 4.8 (included in Windows 10 22H2)
- Windows PowerShell 5.1
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\build.ps1Output: dist\SnapLayouts10.exe. The script also generates assets\app.ico if missing. Nothing is
downloaded from the network.
Automated geometry tests:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\tools\test-geometry.ps1Release packages:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\package.ps1CI (.github/workflows/build.yml) builds, tests, and packages on windows-latest.
.github/workflows/release.yml publishes a release when a v* tag is pushed. See
PUBLISHING-GITHUB.md.
SnapLayouts10/
├── .github/
│ ├── workflows/ # build CI + automatic release
│ ├── ISSUE_TEMPLATE/
│ └── PULL_REQUEST_TEMPLATE.md
├── build.ps1 # csc build
├── package.ps1 # portable/source packages + SHA-256
├── README.md
├── LICENSE
├── NOTICE.md
├── CHANGELOG.md
├── CONTRIBUTING.md
├── SECURITY.md
├── assets/app.ico
├── dist/ # generated locally, ignored by Git
├── docs/
│ ├── TESTING.md
│ ├── COMPATIBILITY.md
│ ├── WINDOWS11-DESIGN.md
│ ├── PUBLISHING-GITHUB.md
│ ├── preview-flyout.png
│ └── social-preview.png
├── src/ # application source
└── tools/ # icon generator + geometry tests
See TESTING.md. On the test machine:
- Maximize detection worked for Notepad and Chrome (
WM_NCHITTEST = 9); - the flyout appeared after roughly 360–430 ms from the first detection tick;
- snapping worked for 2 columns, 70/30, 3 columns, and 4 quadrants;
- Snap Assist opened in the free zone with six floating live previews and snapped the selected window;
- settings, startup, and tray behavior were verified;
- automated geometry tests pass for all six layouts and a simulated second monitor.
- Windows with fully custom title bars that do not return
HTMAXBUTTONmay not be detected. - Elevated applications may reject
SetWindowPosfrom a normal-integrity process (UIPI). Run SnapLayouts 10 as administrator if you need that. - Multi-monitor support is implemented with per-monitor APIs, but hardware testing used one physical monitor.
- Snap Assist shows up to six windows, selected by Z-order.
- Preview rendering depends on DWM; if a thumbnail cannot be created, the app icon is shown.
- The executable is not code-signed. SmartScreen may warn on first run. Verify the hash or build from source.
- Windows 7/8 are not supported; target is Windows 10 22H2 x64 (also runs on Windows 11).
The app has no network, telemetry, or auto-update. It writes only:
%APPDATA%\SnapLayouts10\settings.ini%APPDATA%\SnapLayouts10\snap.log- optionally, at your request,
HKCU\Software\Microsoft\Windows\CurrentVersion\Run\SnapLayouts10
The log may contain window titles when --debug is enabled. Remove sensitive data before sharing it.
See SECURITY.md.
Contributions are welcome. Read CONTRIBUTING.md and CODE_OF_CONDUCT.md. For vulnerabilities, use SECURITY.md, not a public issue.
MIT © 2026 SnapLayouts 10 contributors.
Unofficial project; see NOTICE.md.
