A lightweight, open-source window-snapping tool for ultrawide monitors on Windows. Hold Shift while dragging any window to see a customizable grid overlay, then drop onto a zone to snap instantly.
Built for displays like 5120×1440 where Windows' built-in snap (halves/quarters) leaves too much wasted space.
Download the latest release - no build tools needed.
| File | Size | Description |
|---|---|---|
| ScreenGridSetup.exe | ~66 MB | Installer - installs to Program Files, adds to Windows startup, creates Start Menu & optional desktop shortcut. Includes uninstaller. |
| ScreenGrid-standalone.exe | ~70 MB | Portable single-file exe, no .NET required |
| ScreenGrid-small.exe | ~200 KB | Portable single-file exe, needs .NET 9 Desktop Runtime |
Recommended: Use the installer for an automatic startup experience.
- Shift + Drag to activate - zero interference with normal window management
- 11 built-in grid rows: Halves, Thirds, 4:3 (left/center/right), Quarters, Fifths - each with a ½-height variant
- Height splits: top/bottom halves for partial-height zones
- Scroll to page through grid variants (2 rows per page) with dot pagination indicators
- Custom grids - create any ratio (2:1, 3:2:1, 16:9, etc.) via the built-in editor
- Save / Load grid layouts as
.screengridJSON files - Customizable colors - per-element RGB sliders for zone, highlight, and snap preview colors with real-time preview
- Full-height snap preview with pixel dimensions shown on hover
- Smart window filtering - only activates for real app windows, ignores games and fullscreen apps
- DPI-aware (PerMonitorV2) - works on mixed-DPI multi-monitor setups
- Click-through overlay - never steals focus or interferes with your drag
- System tray only - no visible window, runs silently in the background
- Run at Startup toggle - enable/disable from the tray menu or via the installer
- Windows installer - proper install/uninstall with auto-startup support
- ~200 KB framework-dependent exe (or ~70 MB self-contained)
⬇️ Download the latest release and run the
.exe. It sits in your system tray.
Prerequisites: .NET 9 SDK, Windows 10+
git clone https://github.com/TtesseractT/ScreenGrid.git
cd ScreenGrid
dotnet run -c Release| Action | Result |
|---|---|
| Shift + Drag a window | Grid overlay appears |
| Scroll wheel while overlay is shown | Page through grid variant pairs |
| Hover over a zone | Zone highlights, full-height snap preview shown |
| Release mouse on a zone | Window snaps to that column (full height) |
| Release Shift while dragging | Cancel - overlay hides, no snap |
| Option | Description |
|---|---|
| Create / Edit Grid | Open the grid editor to add, remove, reorder rows |
| Load Grid from File… | Import a .screengrid JSON layout |
| Reset Grid to Defaults | Restore all 5 built-in grid rows |
| Run at Startup | Toggle Windows startup registration (checked = enabled) |
| How to use | Quick usage guide |
| Exit | Close ScreenGrid |
Right-click the tray icon → Create / Edit Grid to open the editor:
- Use preset buttons to quickly add common rows (Halves, Thirds, 4:3, etc.)
- Click + Custom… to enter any ratio - e.g.
3:2:1or16:9 - Reorder rows with ▲/▼ - top row appears at the top of the overlay
- Rename rows to anything you like
- Click Apply & Close to activate immediately
- Click Save to File… to export and share your layout
Grid configs are stored as simple JSON:
{
"name": "My Layout",
"rows": [
{ "name": "HALVES", "ratios": [1, 1] },
{ "name": "HALVES ½H", "ratios": [1, 1], "heightRatios": [1, 1] },
{ "name": "Wide + Sidebar", "ratios": [3, 1] },
{ "name": "THIRDS", "ratios": [1, 1, 1] },
{ "name": "16:9 Split", "ratios": [16, 9] }
]
}The overlay shows 2 rows at a time. Scroll the mouse wheel to page through all 11 rows.
Page 1 (scroll ↑↓ to change)
┌──────────────────────────────────────────────────────────────┐
│ HALVES (full height) │
│ ┌────────────────────────┐ ┌────────────────────────┐ │
│ │ 1/2 (2560px) │ │ 2/2 (2560px) │ │
│ └────────────────────────┘ └────────────────────────┘ │
├──────────────────────────────────────────────────────────────┤
│ HALVES ½H (top/bottom split) │
│ ┌───────────┐ ┌───────────┐ │
│ │ 1/2 Top │ │ 2/2 Top │ │
│ ├───────────┤ ├───────────┤ │
│ │ 1/2 Bot │ │ 2/2 Bot │ │
│ └───────────┘ └───────────┘ │
└──────────────────────────────────────────────────────────────┘
Page 2
┌──────────────────────────────────────────────────────────────┐
│ THIRDS (full height) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 1/3 │ │ 2/3 │ │ 3/3 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
├──────────────────────────────────────────────────────────────┤
│ THIRDS ½H (top/bottom split) │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │1/3 Top │ │2/3 Top │ │3/3 Top │ │
│ ├────────┤ ├────────┤ ├────────┤ │
│ │1/3 Bot │ │2/3 Bot │ │3/3 Bot │ │
│ └────────┘ └────────┘ └────────┘ │
└──────────────────────────────────────────────────────────────┘
Page 3
┌──────────────────────────────────────────────────────────────┐
│ 4:3 LEFT │
│ ┌─────────────────┐ ┌────────────┐ │
│ │ 4 │ │ 3 │ │
│ └─────────────────┘ └────────────┘ │
├──────────────────────────────────────────────────────────────┤
│ 4:3 CENTER │
│ ┌─────────┐ ┌─────────────┐ ┌─────────┐ │
│ │ 3 │ │ 4 │ │ 3 │ │
│ └─────────┘ └─────────────┘ └─────────┘ │
└──────────────────────────────────────────────────────────────┘
Page 4
┌──────────────────────────────────────────────────────────────┐
│ 4:3 RIGHT │
│ ┌────────────┐ ┌─────────────────┐ │
│ │ 3 │ │ 4 │ │
│ └────────────┘ └─────────────────┘ │
├──────────────────────────────────────────────────────────────┤
│ QUARTERS (full height) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 1/4 │ │ 2/4 │ │ 3/4 │ │ 4/4 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└──────────────────────────────────────────────────────────────┘
Page 5
┌──────────────────────────────────────────────────────────────┐
│ QUARTERS ½H (top/bottom split) │
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │1/4 T │ │2/4 T │ │3/4 T │ │4/4 T │ │
│ ├──────┤ ├──────┤ ├──────┤ ├──────┤ │
│ │1/4 B │ │2/4 B │ │3/4 B │ │4/4 B │ │
│ └──────┘ └──────┘ └──────┘ └──────┘ │
├──────────────────────────────────────────────────────────────┤
│ FIFTHS (full height) │
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ 1/5 │ │ 2/5 │ │ 3/5 │ │ 4/5 │ │ 5/5 │ │
│ └────────┘ └────────┘ └────────┘ └────────┘ └────────┘ │
└──────────────────────────────────────────────────────────────┘
Page 6
┌──────────────────────────────────────────────────────────────┐
│ FIFTHS ½H (top/bottom split) │
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │1/5 T │ │2/5 T │ │3/5 T │ │4/5 T │ │5/5 T │ │
│ ├──────┤ ├──────┤ ├──────┤ ├──────┤ ├──────┤ │
│ │1/5 B │ │2/5 B │ │3/5 B │ │4/5 B │ │5/5 B │ │
│ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘ │
│ (last page shows single row) │
└──────────────────────────────────────────────────────────────┘
Full-height rows snap windows to the full height of the work area. ½H rows split each zone into top/bottom halves for partial-height snapping.
dotnet publish -c Release -r win-x64 --no-self-contained -p:PublishSingleFile=true -p:EnableCompressionInSingleFile=false -o ./publish-smalldotnet publish -c Release -r win-x64 --self-contained -p:PublishSingleFile=true -o ./publishRequires Inno Setup 6:
# First publish the self-contained exe (above), then:
& "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" installer/ScreenGridSetup.iss
# Output: installer-output/ScreenGridSetup.exeOption A: Use the installer (recommended)
Download ScreenGridSetup.exe — during installation, the "Run at startup" option is checked by default.
Option B: Toggle from the app
Right-click the tray icon → check Run at Startup. This writes to HKCU\...\Run (current user only, no admin required).
Option C: Manual shortcut
- Press
Win+R→ typeshell:startup→ Enter - Create a shortcut to
ScreenGrid.exein that folder
ScreenGrid/
├── App.xaml.cs # Entry point, tray icon, WinEvent hook, drag tracking
├── OverlayWindow.xaml.cs # Full-screen transparent overlay, grid rendering
├── GridEditorWindow.xaml.cs # Grid editor UI (add/remove/reorder rows, height ratios)
├── CustomRatioDialog.xaml.cs # Dialog for entering custom ratios
├── GridConfig.cs # Grid layout model, JSON serialization
├── GridZone.cs # Individual snap zone model
├── NativeMethods.cs # Win32 P/Invoke declarations
├── StartupManager.cs # Windows startup registry management
├── ScreenGrid.csproj # .NET 9 WPF project
├── installer/ # Inno Setup installer script
└── tests/ # xUnit test suite
Key Win32 APIs:
SetWinEventHook- detects window drag start/end system-wideGetAsyncKeyState- polls Shift key state at 60 fpsGetCursorPos- tracks cursor position during dragMoveWindow- snaps the window to the target zoneDwmGetWindowAttribute- compensates for invisible DWM bordersGetMonitorInfo/GetDpiForMonitor- multi-monitor and DPI support
Contributions are welcome! See CONTRIBUTING.md for guidelines.
MIT - free to use, modify, and distribute.
