Guide · Windows 10 & 11 · Updated October 2026
How to save a window layout on Windows 11
The short answer is that Windows 11 has no save-layout button. It has three features that each remember a piece of the problem, none of which survives a restart the way people expect. Here is what each one covers, where the edges are, and what to do about the gap.
What Windows 11 already remembers
Snap Groups
Snap two or more windows into a layout – hover the maximize button, press Win + Z, or drag a window to an edge – and Windows treats them as a group. Hovering any of those windows on the taskbar shows the whole group as one thumbnail, and clicking it brings all of them back together.
What it does not do is persist: the group exists only as long as its windows do. Close one, and the group is gone. Restart, and it is gone. You also cannot name a group, keep several of them, or choose one deliberately.
Remember window locations based on monitor connection
Under Settings → System → Display → Multiple displays. Windows stores an arrangement for each monitor configuration and replays it when that configuration returns. This is the feature that saves you when a screen sleeps or a dock is unplugged. It stores exactly one arrangement per configuration – a safety net, not a layout manager.
Virtual desktops
Win + Ctrl + D creates a second desktop, and each keeps its own set of windows. Recent Windows 11 builds bring virtual desktops back after a restart. But a virtual desktop separates windows; it does not record where they sit, and applications that were closed are not reopened.
Doing it yourself with PowerShell
Window positions are readable and writable through two well-documented Win32 calls, GetWindowRect and SetWindowPos. A script that captures every visible top-level window to a file is about thirty lines:
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class Win {
[StructLayout(LayoutKind.Sequential)]
public struct RECT { public int L, T, R, B; }
[DllImport("user32.dll")]
public static extern bool GetWindowRect(IntPtr h, out RECT r);
[DllImport("user32.dll")]
public static extern bool SetWindowPos(IntPtr h, IntPtr after,
int x, int y, int cx, int cy, uint flags);
}
"@
# Save
Get-Process | Where-Object { $_.MainWindowHandle -ne 0 } | ForEach-Object {
$r = New-Object Win+RECT
[void][Win]::GetWindowRect($_.MainWindowHandle, [ref]$r)
[pscustomobject]@{
Name = $_.ProcessName; Title = $_.MainWindowTitle
X = $r.L; Y = $r.T; W = $r.R - $r.L; H = $r.B - $r.T
}
} | ConvertTo-Json | Set-Content "$env:USERPROFILE\layout.json"
# Restore
Get-Content "$env:USERPROFILE\layout.json" | ConvertFrom-Json | ForEach-Object {
$item = $_
Get-Process -Name $item.Name -ErrorAction SilentlyContinue |
Where-Object { $_.MainWindowHandle -ne 0 } | Select-Object -First 1 |
ForEach-Object {
[void][Win]::SetWindowPos($_.MainWindowHandle, [IntPtr]::Zero,
$item.X, $item.Y, $item.W, $item.H, 0x0004)
}
}
Treat that as a sketch rather than a finished tool – it is the honest shape of the problem, not a product. It also shows where the difficulty actually lives, which is not in moving windows:
- Matching. Two Explorer windows, three Chrome windows –
ProcessNamecannot tell them apart, so the script puts the wrong window in the wrong place as soon as you have more than one of anything. - Maximized state.
SetWindowPoson a maximized window gives you a maximized window at odd coordinates. Restoring it, positioning it, then maximizing it again is a separate step. - Monitors. Coordinates are absolute. Move a monitor in the display arrangement, or plug in a different second screen, and every saved coordinate points somewhere else.
- Timing. A window that was just launched does not exist yet when the script reaches it. You have to wait for it.
- Elevation. A normal process cannot move a window that belongs to an elevated one. Windows blocks it, and no flag changes that.
All of that is solvable, and if you enjoy this sort of thing it is a nice weekend. If you don’t, it is the reason the tools in this category exist.
The third-party options
- PowerToys – free, from Microsoft. FancyZones manages where windows may go; Workspaces launches a set of apps into saved positions with one click or a desktop shortcut. See what FancyZones remembers and what it doesn’t.
- DisplayFusion – a large multi-monitor suite; its Pro edition saves window position profiles among many other features.
- DeskScene – the one this site is about. Below, briefly; the comparison is on the home page.
Where DeskScene comes in
Scenes instead of scripts
DeskScene saves the windows you have open – position, size, monitor, maximized state – as a named scene, and puts the arrangement back with a click, a global hotkey, the tray, the command line or automatically when your monitor setup changes. Several scenes live side by side, so a writing layout and a meeting layout are one keystroke apart.
It handles the awkward parts from the list above: it matches windows by title, class and position rather than process name alone, restores maximized windows on the right monitor, maps scenes onto the closest monitors when the setup differs, waits for apps it starts, and tells you when a window runs as administrator.

15-day free trial, then €9.99 once. No subscription.