DeskScene

DeskScene / Save a window layout on Windows 11

Guide

How to save a window layout on Windows 11

Windows 11 · Updated August 2026

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 in the way people expect. Here is exactly 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 afterwards shows the whole group as one thumbnail, and clicking it brings all of them back together.

This is genuinely useful and most people never find it. 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 — Windows forms them implicitly from whatever you snapped.

Remember window locations based on monitor connection

Under Settings → System → Display → Multiple displays. Windows stores an arrangement for each monitor configuration it sees 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. It is a safety net, not a layout manager — there is no way to say "load my writing layout instead".

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, so this is closer to durable than the other two. But a virtual desktop separates windows; it does not record where they sit. After a restart the desktops return, the windows do not come back positioned, and applications that were closed are not reopened.

What none of them do

Not one of the three reopens an application that isn't running. Every built-in mechanism arranges windows that already exist. If your morning involves opening the same six programs before arranging them, Windows has nothing for the first half of that.

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 starting point rather than a finished tool — it is the honest shape of the problem, not a product. Run it in a normal PowerShell window and check the result before relying on it.

It also shows you where the difficulty actually lives, which is not in moving windows. It is in everything around 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

Several tools cover this, and they aim at different things:

What DeskScene does with this

It saves the windows you have open — position, size, monitor, maximized state — as a named profile, and puts the arrangement back with one click, a global hotkey, or automatically when your monitor setup changes. Several profiles live side by side, so a writing layout and a meeting layout are one keystroke apart.

It handles the awkward parts listed above: matching windows by title similarity rather than process name alone, restoring maximized state correctly, storing positions per monitor, and launching applications that aren't running before it positions them.

See how it works Free seven-day trial, then €9.99 once. No subscription.

Its limits, stated up front: Store (UWP) apps can't be captured, windows running as administrator can't be moved by a normal program, and matching is a heuristic. The first two apply to every tool in this category, the PowerShell script included — they are Windows rules, not implementation choices.