This is the full developer documentation for VirtualZones # Install and uninstall VirtualZones on Windows > System requirements, the installer, the SmartScreen warning, what happens on first launch, and how to uninstall VirtualZones completely. ## System requirements [Section titled “System requirements”](#system-requirements) * **Windows 10 version 1809 or later, or Windows 11**, 64-bit. * No .NET, no Visual C++ redistributable, no driver. Everything is in one exe. * **No administrator rights.** VirtualZones writes only to your user profile (`HKCU` and `%APPDATA%`). * Internet is optional. It is used to activate a license, download UI languages and check for updates. See [Privacy & network](/docs/reference/privacy-and-network/). * [Share Zone](/docs/guides/share-a-zone/) uses the GPU’s desktop duplication, so it needs a normal graphics driver. ## Download [Section titled “Download”](#download) Get it from **[virtualzones.cc/download](https://virtualzones.cc/download)** and run **`VirtualZones-Setup.exe`**: * By default it installs **for the current user only**, to `%LOCALAPPDATA%\Programs\VirtualZones`, with **no admin rights** needed. * You can choose **all users** instead (`C:\Program Files\VirtualZones`), which needs admin. * It adds Start Menu shortcuts and an optional *Start VirtualZones when Windows starts* task (unchecked by default). Mac VirtualZones is Windows-only today. A **Mac version is coming soon**. ### “Windows protected your PC” [Section titled ““Windows protected your PC””](#windows-protected-your-pc) This is Microsoft Defender SmartScreen. It appears for apps that are unsigned or don’t yet have download reputation. Click **More info → Run anyway**. ## What happens on first launch [Section titled “What happens on first launch”](#what-happens-on-first-launch) 1. The main window opens, centered on your primary monitor. 2. **Confinement is off** until you press **Start** (or `Ctrl`+`Alt`+`R`). 3. Every monitor starts on the **`100%`** layout (one zone the size of the screen), so nothing moves until you choose a split layout. 4. Your [7-day trial](/docs/licensing/trial-and-plans/) starts. Next: the [Quick start](/docs/start/quick-start/). Only one copy runs at a time Launching VirtualZones while it’s already running **replaces** the running copy. The new copy asks the old one to quit, then takes over. It does not just bring the old window forward. ## Updating [Section titled “Updating”](#updating) VirtualZones checks for new versions at launch and about every 24 hours. See [Updates](/docs/guides/updates/). ## Uninstall [Section titled “Uninstall”](#uninstall) Licensed? Deactivate first Before you uninstall on a licensed PC, open **License…** and click **Deactivate**. This frees the activation so you can use your key on another computer. See [Move or deactivate](/docs/licensing/move-or-deactivate/). Go to *Settings → Apps → Installed apps → VirtualZones → Uninstall*. The uninstaller removes the *Start with Windows* entry and the program files. The uninstaller leaves your settings behind in case you reinstall. To remove **everything**, also delete: | Item | Location | | --------------------------------------------- | ----------------------------------------- | | Settings, license, trial data, language cache | `%APPDATA%\VirtualZones\` | | Trial stamp | Registry key `HKCU\Software\VirtualZones` | | Diagnostic log | `%TEMP%\virtualzones.log` | | Downloaded update (if any) | `%TEMP%\VirtualZones-Update-Setup.exe` | See [Files & data locations](/docs/reference/files-and-data/) for what each file contains. # VirtualZones quick start: split your monitor in a minute > Get from download to your first confined window in about a minute. Pick a split layout, press Start, maximize a window. ## 1. Run VirtualZones [Section titled “1. Run VirtualZones”](#1-run-virtualzones) Download it from [virtualzones.cc/download](https://virtualzones.cc/download) and run the installer ([details](/docs/start/installation/)). No admin rights are needed. The main window opens and a tray icon appears. ## 2. Pick a split layout [Section titled “2. Pick a split layout”](#2-pick-a-split-layout) New monitors start on **`100%`**: a single zone the size of the whole screen, which behaves exactly like normal Windows. In the **Current Layout** card, open the dropdown and choose a split, for example: | Layout | Zones | On a 5120×1440 monitor | | ------------------- | --------------------------- | ---------------------- | | `25% \| 50% \| 25%` | Narrow, wide center, narrow | 1280 + 2560 + 1280 px | | `33% \| 33% \| 33%` | Three equal columns | about 1707 px each | | `50% \| 50%` | Two equal columns | 2560 + 2560 px | The preview above the dropdown shows the zones and their sizes. Want something else, like a 2×2 grid? Click **Edit Layouts…** and see [Custom layouts](/docs/guides/custom-layouts/). ## 3. Press Start [Section titled “3. Press Start”](#3-press-start) Click the big **Start** button, or press `Ctrl`+`Alt`+`R` anywhere. The status line changes to: > Active: fullscreen/maximize snaps to zones; Shift-drag to snap. Thin borders in your app color (purple by default) outline each zone. ## 4. Confine your first window [Section titled “4. Confine your first window”](#4-confine-your-first-window) * **Maximize** any window, with the maximize button or by double-clicking the title bar. It fills **the zone under your mouse** instead of the whole monitor. * Hold `Shift` and **drag** a window by its title bar. The target zone lights up. Release the mouse while still holding Shift to drop it in. * Press `Ctrl`+`Alt`+`A` or `D` to push the focused window one zone left or right. Try a video call: maximize Zoom or Teams in the center zone. It fills a clean 2560×1440 center while your browser and notes stay visible on either side. ## 5. Make it permanent (optional) [Section titled “5. Make it permanent (optional)”](#5-make-it-permanent-optional) In **Preferences**, turn on: * **Start with Windows**, which launches VirtualZones into the tray when you sign in. * **Start confining on launch**, which presses Start for you. Every option is explained in [Settings](/docs/reference/settings/). ## Stopping [Section titled “Stopping”](#stopping) * **Stop** (or `Ctrl`+`Alt`+`R`) turns confinement off. Windows stay where they are. * `Ctrl`+`Alt`+`Z` only **hides the borders**. Confinement keeps running. * Closing the window (✕) hides VirtualZones to the tray. Use tray → **Exit** to quit. # Theme, accent color and language settings > Switch VirtualZones between light, dark and auto themes, pick an accent color for the UI and zone borders, and choose one of 26 UI languages. ## Theme [Section titled “Theme”](#theme) Use the three-way switch in the title bar: | Icon | Theme | | ---- | ------------------------------------------------------------------------------------------------------------------- | | ☀ | **Light** | | ◐ | **Auto**: follows Windows’ app mode (*Settings → Personalization → Colors → Choose your app mode*) and changes live | | ☾ | **Dark** (default) | ## App color [Section titled “App color”](#app-color) **App color…** in Preferences sets the accent color used for buttons, toggles, **zone borders**, the Shift-drag highlight, the Share Zone frame, layout previews, and the tray and taskbar icons. * 12 presets: purple (default, `#a855f7`), indigo, blue, cyan, teal, green, amber, orange, red, rose, pink and violet. * A **hue** slider and a **hex** field for any other color. * Changes preview live. **Done** keeps the color, while **Cancel**, ✕ or `Esc` returns to the color you had before. Tip If your zone borders are hard to see against your wallpaper, pick a contrasting app color. ## Language [Section titled “Language”](#language) Pick a language from the **Language** dropdown in the title bar. VirtualZones comes in 26 languages: English, German, Spanish, French, Italian, Dutch, Portuguese (Portugal), Portuguese (Brazil), Polish, Ukrainian, Russian, Czech, Swedish, Danish, Norwegian, Finnish, Greek, Turkish, Japanese, Korean, Simplified Chinese, Traditional Chinese, Vietnamese, Thai, Indonesian and Hindi. * **English is built in.** Other languages are downloaded the first time you choose them (from GitHub) and saved in `%APPDATA%\VirtualZones\lang\`, so they also work offline. * The selected language is refreshed at each launch so translations stay current. * Any text that isn’t translated yet falls back to English. * Dates follow the chosen language. English uses your Windows region format. * Error messages that come from the license server are always in English. If the UI stays in English after you choose a language, the download failed. Check that `raw.githubusercontent.com` is reachable (some corporate networks block it). # Keep fullscreen and maximized windows inside a zone > How VirtualZones keeps maximized and fullscreen windows inside a zone, which zone it picks, which apps work, and which windows are deliberately left alone. **Confinement** is the core of VirtualZones. While it is running, any window that tries to take over a monitor is resized into a zone instead, as if that zone were a separate monitor. Turn it on with **Start** in the main window, tray → **Start**, or `Ctrl`+`Alt`+`R`. The status line reads `Active: fullscreen/maximize snaps to zones; Shift-drag to snap.` while it runs and `Idle` when it is stopped. ## What triggers it [Section titled “What triggers it”](#what-triggers-it) A foreground window is confined when it: * is **maximized** (maximize button, title-bar double-click, `Win`+`↑`), * goes **fullscreen**, such as F11, a slideshow or a video player, or * is simply sized to cover the whole monitor or work area. This applies on any monitor that is **Enabled** and has a layout. ## Which zone it lands in [Section titled “Which zone it lands in”](#which-zone-it-lands-in) 1. **The zone under your mouse pointer.** You usually just clicked maximize or pressed F11 there, so that zone wins. 2. If the pointer is on another monitor (for example you maximized with the keyboard), VirtualZones uses the window’s normal (restored) position if it is clearly smaller than the screen, otherwise the window’s center. 3. A one-zone layout always uses that zone. A maximized window is first restored, then placed so its **visible edges** sit flush on the zone. Windows 10/11 have invisible resize borders, which VirtualZones accounts for. ## What works [Section titled “What works”](#what-works) | Scenario | Result | | ------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | | Maximize button or title-bar double-click, any app | Snaps into its zone | | PowerPoint slideshow | Confined | | Video players and borderless-fullscreen apps | Confined | | Chrome, Edge and Firefox F11 | Confined (Chrome and Edge since 1.3.16) | | A video’s fullscreen button in a browser (e.g. YouTube) | Confined, and the page redraws to fit the zone (since 1.3.16) | | Exclusive-fullscreen games (DirectX) | **Not confined.** They bypass the desktop compositor. Use the game’s **borderless windowed** mode. | ## Windows that are never confined [Section titled “Windows that are never confined”](#windows-that-are-never-confined) * **Always-on-top windows and tool windows.** This is deliberate: screenshot and region-capture overlays (ShareX, Snipping Tool, OBS region pickers) would otherwise be pushed into a zone. It also means an app you set to “always on top”, such as a mini player or picture-in-picture, won’t be confined. You can still place it with [Shift-drag](/docs/guides/drag-to-snap/) or a [move hotkey](/docs/guides/moving-windows/). * The taskbar, Start menu, Alt+Tab, Task View, notification and other Windows shell surfaces. * VirtualZones’ own windows. * Windows on a monitor that is disabled or has no layout. * **Elevated (administrator) windows**, when VirtualZones itself is not running as administrator. Windows blocks normal apps from moving elevated ones. ## Apps that fight back [Section titled “Apps that fight back”](#apps-that-fight-back) Some apps re-assert their full-screen size after being moved. VirtualZones keeps re-confining them, but after **3.5 seconds** of back-and-forth it **gives up** on that window until the window stops being full-screen. This avoids an endless flicker. Browsers are handled specially: a fullscreen Chrome or Edge window is put back in its zone whenever it tries to take over the screen again, for example when you switch between its windows. ## The animation setting [Section titled “The animation setting”](#the-animation-setting) While confinement runs, VirtualZones turns off Windows’ *Animate windows when minimizing and maximizing* effect so windows snap into their zone instead of zooming to full screen first. Your previous setting is restored when you press **Stop** or exit. Even so, a single frame (about 16 ms) can flash at full size when an app goes fullscreen with F11. This is cosmetic, and the window ends up confined. ## Hiding the borders [Section titled “Hiding the borders”](#hiding-the-borders) **Show zones** in Preferences, `Ctrl`+`Alt`+`Z`, or tray → **Hide zones** hides the zone borders. **Confinement keeps running.** The borders come back each time you press Start. ## When the trial has ended [Section titled “When the trial has ended”](#when-the-trial-has-ended) Without a license, confinement can’t be started after the [7-day trial](/docs/licensing/trial-and-plans/). If it was running it stops within a minute, and the status reads `Trial expired - click License to activate`. # Create custom zone layouts in the grid editor > Build your own zone layouts in the VirtualZones grid editor. Templates, rows and columns, click to split, click a border to merge, exact % and px sizes. The layout editor builds any grid of zones for the **screen selected in the main window**. Open it with the **Edit Layouts…** link next to the Current Layout dropdown, or with **Add** when a screen has no layouts. The editor has two views: **Layouts** (manage) and **Edit Layout**. ## Layouts view [Section titled “Layouts view”](#layouts-view) A list of the screen’s saved layouts, each with a thumbnail, its name and the number of zones. * Hover over a layout to show **Edit** and a red **✕**. Clicking the row also opens Edit. * **✕ deletes the layout immediately**, without asking. * **Add** starts a new layout (a 1×3 grid with no name). * **Restore Defaults** adds back any [built-in layouts](/docs/guides/zones-and-layouts/#built-in-layouts) you deleted. It is greyed out when none are missing. * **Close** closes the editor. `Esc` does the same. Note This view shows the first **6** layouts only. Any more still appear in the main dropdown and the tray **Layout** menu, but you have to delete layouts here to edit the others. ## Edit Layout view [Section titled “Edit Layout view”](#edit-layout-view) From top to bottom: ### Layout name [Section titled “Layout name”](#layout-name) Required. Names can’t contain `"` `\` `{` `}` `[` or `]`. Saving with a name that already exists **replaces** that layout. ### Templates [Section titled “Templates”](#templates) **25/50/25**, **50/50**, **33/33/33** and **100%** load the matching built-in geometry as a starting point. ### Rows and Columns [Section titled “Rows and Columns”](#rows-and-columns) Use − and + to set a uniform grid from **1 to 6** rows and columns. Changing either one resets the grid. Tip Using a template or the Rows/Columns steppers on an existing layout **clears its name**, so you can’t overwrite the original by accident. Type a name to save the result as a new layout, or re-type the old one to replace it. ### Canvas: split and merge [Section titled “Canvas: split and merge”](#canvas-split-and-merge) The canvas is shaped like the selected monitor. Hover to preview what a click will do. | Action | Result | | ------------------------------------------- | --------------------------------------------------------- | | **Click inside a zone** | Split it in two, side by side (vertical divider) | | `Shift` + **click inside a zone** | Split it in two, one above the other (horizontal divider) | | **Click a shared border** between two zones | Merge them into one, if the result is a rectangle | A zone can’t be split if either half would be smaller than 3% of the screen. ### Zone table: exact sizes [Section titled “Zone table: exact sizes”](#zone-table-exact-sizes) One row per zone (numbered in [reading order](/docs/guides/zones-and-layouts/#zone-numbers)) with **Width** and **Height** fields and a **%** / **px** unit toggle. * Type a value and press `Enter` or `Tab`. Only the zones **after** this one in the same row or column shrink or grow to make room. * An invalid value (not a number, 0 or less, 100% or more, or leaving nothing for the other zones) snaps back. ### Save / Cancel [Section titled “Save / Cancel”](#save--cancel) **Save** checks the name, saves and returns to the list. **Cancel** throws away your changes. Pressing `Enter` in the name field also saves. ## What saving does [Section titled “What saving does”](#what-saving-does) * The layout appears in the main dropdown and the tray **Layout** menu right away. * Renaming the active layout keeps it active. * Saving or deleting the **active** layout while confinement is running restarts confinement and closes any [shared zones](/docs/guides/share-a-zone/) on that screen. ## Editor keyboard [Section titled “Editor keyboard”](#editor-keyboard) | Key | Action | | ---------------------------- | -------------------------------------------- | | `Esc` | Close the editor | | `Tab` / `Shift`+`Tab` | Move between fields | | `Enter` | Commit a number, or Save from the name field | | `Ctrl`+`A` / `C` / `X` / `V` | Select all, copy, cut, paste in text fields | ## Layout ideas [Section titled “Layout ideas”](#layout-ideas) | Layout | How to build it | | ---------------------------------- | ------------------------------------------------------------ | | Quad (2×2) | Rows 2, Columns 2 | | Big center with stacked side zones | Template 25/50/25, then Shift-click the left and right zones | | 60/40 split | Template 50/50, then set zone 1 width to 60% | | Focus column with a strip below | Columns 1, then Shift-click, then set zone 1 height to 75% | ## Backing up or copying layouts [Section titled “Backing up or copying layouts”](#backing-up-or-copying-layouts) There is no import/export button. Layouts are stored in `settings.json`. See [Files & data](/docs/reference/files-and-data/#backing-up-or-copying-layouts). # Snap windows into zones with Shift-drag > Hold Shift while dragging a window's title bar to highlight a zone, then release to drop the window into it, FancyZones-style. Drag-to-snap lets you place any window in a zone with the mouse, the same way PowerToys FancyZones does. ## How to snap a window [Section titled “How to snap a window”](#how-to-snap-a-window) 1. Make sure confinement is **running** (press **Start**). Drag-to-snap is off while stopped. 2. Start dragging a window by its **title bar**. 3. Hold `Shift`. The zone under your pointer lights up with a translucent highlight in your app color, on whichever monitor the pointer is on. 4. Move to the zone you want and **release the mouse button while still holding Shift**. The window is placed flush into that zone. ## Cancel a snap [Section titled “Cancel a snap”](#cancel-a-snap) Release `Shift` **before** the mouse button. The highlight disappears immediately and the window is dropped wherever you let go, like a normal drag. ## Details [Section titled “Details”](#details) * The drag has to move more than about 12 pixels before the highlight appears, so a click on the title bar never snaps. * Snapping works across monitors: drag onto another enabled monitor and its zones light up. * The snapped zone follows that screen’s **Cover taskbar** setting: above the taskbar by default, or under it if Cover taskbar is on. * Always-on-top windows, which [automatic confinement](/docs/guides/confinement/) skips, **can** be snapped this way. * Elevated (administrator) windows can’t be moved unless VirtualZones also runs as administrator. * Drag-to-snap uses a low-level mouse hook that only exists while confinement is running. It records nothing. See [Privacy & network](/docs/reference/privacy-and-network/). # VirtualZones main window and tray menu explained > A tour of every part of the VirtualZones main window (title bar, Start/Stop, Current Layout, Preferences, License) and the system tray icon and menu. ## Main window [Section titled “Main window”](#main-window) The main window is a single panel with a custom title bar and four cards. It remembers its position between runs and moves back onto a visible monitor if the one it was on is gone. ### Title bar [Section titled “Title bar”](#title-bar) | Control | What it does | | ---------------------- | ----------------------------------------------------------------------------------------- | | **VirtualZones** | App name. Drag here to move the window | | **Language** dropdown | Choose one of 26 UI languages ([details](/docs/guides/appearance-and-language/#language)) | | Theme switch ☀ / ◐ / ☾ | **Light**, **Auto** (follows Windows) or **Dark** (default) | | **–** | Minimize | | **✕** | Close: hides to the tray if **Show in tray** is on, otherwise exits | ### Start / Stop card [Section titled “Start / Stop card”](#start--stop-card) * A large **Start** / **Stop** button. It becomes **Add** when the selected screen has no layouts, and is disabled when the trial has ended without a license. * A status line: | Status | Meaning | | ----------------------------------------------------------------- | ------------------------------------------ | | `Active: fullscreen/maximize snaps to zones; Shift-drag to snap.` | Confinement is running | | `Idle` | Confinement is stopped | | `No layouts yet - click Add to create one.` | The selected screen has no layouts | | `Trial expired - click License to activate` (red) | The trial is over and no license is active | ### Screen and Current Layout card [Section titled “Screen and Current Layout card”](#screen-and-current-layout-card) * **Screen tabs**, one per monitor ([Multiple monitors](/docs/guides/multiple-monitors/)). * A **preview** of the selected monitor with its resolution, the active layout and each zone’s size. * The **Enabled** switch for that screen. * The **Current Layout** dropdown and the **Edit Layouts…** link ([Custom layouts](/docs/guides/custom-layouts/)). ### Preferences card [Section titled “Preferences card”](#preferences-card) Toggles for **Show zones**, **Start confining on launch**, **Cover taskbar**, **Start with Windows**, **Show in tray**, **Start minimized** and **Update automatically**, plus the **Keyboard Shortcuts…** and **App color…** buttons. Each is explained in [Settings](/docs/reference/settings/). ### License card [Section titled “License card”](#license-card) * **License…** opens the [License dialog](/docs/licensing/activate/). * The license status: `Licensed to {your name}`, `Licensed.`, `Trial: N day(s) left.` or `Trial expired - click License to activate`. * The version number and an **About** button. * **Update to \** (top right of the card) whenever a newer version is available, even if you chose “Skip this version”. Click it to open the [update dialog](/docs/guides/updates/). ### About dialog [Section titled “About dialog”](#about-dialog) Shows the version and release date, a short feature summary, a link to virtualzones.cc, and your personal usage counter: `Used N times since `. It counts snaps, shortcut moves, shares and newly confined windows. The counter is stored only on your PC and is never sent anywhere. **Contact me** opens a feedback email to the developer. ### Keyboard navigation [Section titled “Keyboard navigation”](#keyboard-navigation) `Tab` / `Shift`+`Tab` move the focus ring between controls, `Space` or `Enter` activate the focused control, and `Esc` closes an open dropdown. ## Tray icon [Section titled “Tray icon”](#tray-icon) The tray icon is a small three-zone tile in your app color. Its top-right tile shows the state: * **App color:** confinement is running. * **Red:** confinement is stopped. Left-click or double-click the icon to show the main window. Right-click it for the menu: | Item | Shortcut | Action | | ------------------------------- | ---------------- | --------------------------------------------------------------------------------------- | | **Show** | | Open the main window | | **Start** / **Stop** | `Ctrl`+`Alt`+`R` | Toggle confinement | | **Hide zones** / **Show zones** | `Ctrl`+`Alt`+`Z` | Hide or show zone borders (greyed out while stopped) | | **Layout ▸** | `Ctrl`+`Alt`+`C` | The selected screen’s layouts. The active one is checked | | **Share ▸** | | `: Zone N` for every enabled monitor, up to 9 zones each. Checked means shared | | **Exit** | | Quit VirtualZones completely | The shortcuts shown in the menu reflect your current bindings, or `Unbound` if cleared. The tray icon is present while **Show in tray** is on, or whenever VirtualZones started hidden (**Start minimized** or **Start with Windows**). # Move windows between zones and monitors with hotkeys > Use Ctrl+Alt+W/A/S/D to push the focused window zone by zone, dock floating windows into a zone, and cross onto the next monitor at the screen edge. With confinement **running**, four global hotkeys move the focused window between zones: | Hotkey | Moves the focused window | | ---------------- | ------------------------ | | `Ctrl`+`Alt`+`W` | Up | | `Ctrl`+`Alt`+`A` | Left | | `Ctrl`+`Alt`+`S` | Down | | `Ctrl`+`Alt`+`D` | Right | All four can be changed in [Keyboard Shortcuts…](/docs/reference/hotkeys/#changing-a-hotkey). ## What a keypress does [Section titled “What a keypress does”](#what-a-keypress-does) * **The window already fills a zone:** it moves to the neighboring zone in that direction. A directly adjacent zone beats a diagonal one. * **The window is floating** (not in a zone, or maximized by Windows): it **docks** into the zone in that direction, measured from the zone nearest its center. If there is no zone further that way, it docks into that nearest zone. A direction key always does something. * **The window is already in the edge zone of its monitor:** it **crosses to the next monitor** in that direction, following how your displays are arranged in Windows. Moving left lands in the other monitor’s right-edge zone, moving right lands in its left-edge zone, and so on. Both monitors must be **Enabled** and have a layout. Monitors stacked above or below are reached with Up and Down. ## Moving the VirtualZones window itself [Section titled “Moving the VirtualZones window itself”](#moving-the-virtualzones-window-itself) The VirtualZones main window can’t be resized to fill a zone, so the move hotkeys **center** it in the target zone at its current size instead. This works across monitors with different scaling. ## When nothing happens [Section titled “When nothing happens”](#when-nothing-happens) * Confinement is stopped. Press **Start** first. * There is no zone in that direction and no enabled monitor beyond it. * The focused window is **elevated** (running as administrator, like Task Manager). Windows won’t let a normal app move it. * Another app has taken the hotkey, or your keyboard layout uses `Ctrl`+`Alt` as AltGr. See [Hotkeys](/docs/reference/hotkeys/#hotkeys-and-altgr-keyboards). # Using VirtualZones with multiple monitors > Per-monitor layouts, screen tabs, the Enabled switch, plugging and unplugging displays, and which screen each command acts on. VirtualZones supports any number of monitors (up to 30), each configured independently. ## Screen tabs [Section titled “Screen tabs”](#screen-tabs) The main window shows one **tab per monitor**: the primary monitor first, then left to right and top to bottom. Each tab shows the monitor’s name as reported by Windows (for example `DELL U3423DW`, or `Display 2` if Windows gives no name), and a preview with the resolution and the active layout. Everything in the **Current Layout** card applies to the **selected tab**: | Per-screen setting | Default for a new monitor | What it does | | ------------------ | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | | **Enabled** | On | Whether windows on this monitor are confined and snapped | | **Cover taskbar** | Off | Zones use the full monitor instead of the area above the taskbar ([details](/docs/guides/zones-and-layouts/#work-area-vs-cover-taskbar)) | | Layouts | The 4 built-ins | This monitor’s own list of layouts | | **Current Layout** | `100%` | The layout in use on this monitor | ## Plugging and unplugging displays [Section titled “Plugging and unplugging displays”](#plugging-and-unplugging-displays) Changes are handled live: * A **new monitor** gets its own settings with the `100%` layout, so nothing moves until you choose a split. * A **disconnected monitor keeps its settings**, and they come back when you reconnect it. Monitors are recognized by their hardware ID, not by port. * If no enabled monitor has a layout any more, confinement stops. ## Which screen does each command act on? [Section titled “Which screen does each command act on?”](#which-screen-does-each-command-act-on) | Command | Acts on | | ------------------------------------------------------------------ | ------------------------------------------------------------------ | | Layout dropdown, **Edit Layouts…**, **Enabled**, **Cover taskbar** | The selected tab | | Tray → **Layout** and `Ctrl`+`Alt`+`C` (cycle layout) | The selected tab, **not** the monitor your active window is on | | Share Zone hotkeys (`Ctrl`+`Alt`+`1`…) | The monitor your **active window** is on | | Tray → **Share** | Lists every monitor explicitly | | Move hotkeys (`Ctrl`+`Alt`+`W`/`A`/`S`/`D`) | The focused window’s monitor, crossing to the next one at the edge | | Maximize / fullscreen confinement | The monitor the window is on | ## Mixed scaling (DPI) [Section titled “Mixed scaling (DPI)”](#mixed-scaling-dpi) VirtualZones is fully per-monitor DPI aware. Its windows render sharply at 100%, 125%, 150%, 225% and other scales, and resize live when you change scaling or drag them to a monitor with a different scale. Zones are measured in real pixels, so they fit exactly at any scale. Note In the layout editor, **px** sizes are calculated from the **primary** monitor’s size, even when you edit another monitor’s layout. Use **%** for exact results on secondary monitors. ## Seeing what VirtualZones detects [Section titled “Seeing what VirtualZones detects”](#seeing-what-virtualzones-detects) Run `VirtualZones.exe --list-monitors` to write every detected monitor (name, bounds, work area, ID) to `%TEMP%\virtualzones.log`. See [Command line](/docs/reference/command-line/). # Share one part of your screen in Zoom, Teams, Meet or OBS > Share exactly one zone of your monitor into a meeting or stream instead of the whole screen, using the tray Share menu or Ctrl+Alt+1/2/3. On a big monitor, sharing your whole screen shows everything and makes it unreadable for viewers. **Share Zone** exposes one zone as its own window, so any app that can “share a window” shows **just that zone**, with whatever is in it, live. ## Start sharing a zone [Section titled “Start sharing a zone”](#start-sharing-a-zone) Use either: * **Tray icon → Share → `: Zone N`**. A checkmark means the zone is being shared. * **Hotkeys:** `Ctrl`+`Alt`+`1`, `2` or `3` share zone 1, 2 or 3 of **the monitor your active window is on**. Zones 4 to 9 have no default hotkey. You can assign them in [Keyboard Shortcuts…](/docs/reference/hotkeys/). Zones are numbered in [reading order](/docs/guides/zones-and-layouts/#zone-numbers): zone 1 is top-left. Press the same hotkey again to stop sharing. A **dashed frame** in your app color marks each shared zone on your screen. Solid borders are normal zones, dashed means shared. **Viewers never see the frame.** ## Pick it in your meeting app [Section titled “Pick it in your meeting app”](#pick-it-in-your-meeting-app) Open your app’s share picker and choose the **window** named: ```plaintext VirtualZones - Share Zone N ``` | App | Where | | ----------------------------- | --------------------------------------------------------------------------------- | | **Zoom** | Share Screen → Basic → pick the *VirtualZones - Share Zone N* window | | **Microsoft Teams** | Share → Window → *VirtualZones - Share Zone N* | | **Google Meet** (Chrome/Edge) | Present now → A window → *VirtualZones - Share Zone N* | | **OBS Studio** | Sources → + → Window Capture → *\[VirtualZones.exe]: VirtualZones - Share Zone N* | | **Discord** | Share Your Screen → Applications → *VirtualZones - Share Zone N* | The meeting sees only that zone, at its native resolution. Everything outside it (other apps, notifications, private notes) stays off the call. You can move windows in and out of the zone during the call, and viewers see whatever is there. ## Good to know [Section titled “Good to know”](#good-to-know) * **Several zones at once:** you can share several zones, even on different monitors. Each gets its own *Share Zone N* window. * **Works whether confinement is on or off.** You don’t need to press Start to share. * **Changing the layout, Cover taskbar or Enabled closes that screen’s shares.** Share again afterwards. * The zone must exist. For example, Share Zone 3 does nothing on a two-zone layout. * The mirror window is invisible and click-through, so it doesn’t block your work. It has a taskbar button so meeting apps list it. Closing that taskbar button (for example with Alt+F4) also stops the share. * If capture is interrupted (lock screen, resolution change), it recovers automatically. ## Performance and privacy [Section titled “Performance and privacy”](#performance-and-privacy) The zone is captured with the GPU’s desktop duplication and copied **on the GPU** into the mirror window, so CPU use stays low. Frames never leave your PC through VirtualZones: the meeting app does the transmitting, exactly as for any window you share. Share Zone is the **only** feature that captures screen content, and only for zones you turn on. # How VirtualZones updates work > How VirtualZones checks for updates, what Install, Later and Skip this version do, the Update automatically option, and how update packages are verified. ## How update checks work [Section titled “How update checks work”](#how-update-checks-work) VirtualZones checks for a newer version **at launch and about every 24 hours** while running. When a newer version is available (and you haven’t skipped it), the **Update Available** dialog shows `VirtualZones is available` with the release notes and three buttons: | Button | Action | | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Install** | Downloads the update (if it isn’t already downloaded), verifies it, and runs the installer silently. VirtualZones closes and reopens on the new version | | **Later** | Closes the dialog. You’ll be asked again at the next check | | **Skip this version** | Stops the pop-up for this version. The License card still shows an **Update to \** link, so you can install it later | ## Update automatically [Section titled “Update automatically”](#update-automatically) With **Update automatically** on in Preferences, the update is **downloaded and verified in the background first**, then the dialog offers **Install**. Turning the option on also triggers an immediate check. With it off (the default), you’re asked before anything is downloaded. Either way, **nothing installs without your click.** ## Verification [Section titled “Verification”](#verification) Every downloaded installer is checked against a **SHA-256 hash** and an **RSA-2048 signature** before it can run. A download that fails verification is deleted and ignored. ## Checking your version [Section titled “Checking your version”](#checking-your-version) The version is shown on the License card (for example `v1.3.16`) and in **About**. Whenever a newer version exists, the License card also shows an **Update to \** link that opens the update dialog. See the [Changelog](/docs/help/changelog/) for what changed. # Zones and layouts: split a monitor into virtual monitors > How zones and layouts work in VirtualZones: the four built-in presets, per-monitor layouts, zone numbering, switching layouts, and the work area vs Cover taskbar. ## The model [Section titled “The model”](#the-model) * A **zone** is a rectangle on one monitor that behaves like its own monitor. It is stored as fractions of the screen (left, top, right, bottom from 0 to 1), so it scales to any resolution. * A **layout** is a named set of zones, for example `25% | 50% | 25%`. * Layouts are **per monitor**. Each screen has its own list of layouts, its own **Current Layout**, its own **Enabled** switch and its own **Cover taskbar** setting. See [Multiple monitors](/docs/guides/multiple-monitors/). * Layouts can be any grid, not just columns. Rows, quads and L-shapes are all possible in the [layout editor](/docs/guides/custom-layouts/). ## Built-in layouts [Section titled “Built-in layouts”](#built-in-layouts) Every newly detected monitor gets these four layouts: | Name | Zones | Example on 5120×1440 | | ------------------- | ---------------------------------- | -------------------- | | `50% \| 50%` | Two equal columns | 2560 + 2560 | | `33% \| 33% \| 33%` | Three equal columns | about 1707 each | | `25% \| 50% \| 25%` | Narrow side columns, wide center | 1280 + 2560 + 1280 | | `100%` | One zone covering the whole screen | 5120 | **`100%` is active on every new monitor.** A single full-screen zone behaves exactly like plain Windows, so connecting a monitor never rearranges your windows by surprise. Choose a split layout to start using zones. The built-ins are ordinary layouts: you can edit, rename or delete them. **Restore Defaults** in the editor adds back any that are missing, and never overwrites a layout with the same name. ## Switching layouts [Section titled “Switching layouts”](#switching-layouts) The layout changes on the **screen selected in the main window** (its tab): * the **Current Layout** dropdown in the main window, * tray icon → **Layout** → pick one (the active layout is checked), * `Ctrl`+`Alt`+`C`, which cycles to the next layout and wraps around. If confinement is running, it restarts on the new layout straight away. Any [shared zones](/docs/guides/share-a-zone/) on that screen are closed. ## Zone numbers [Section titled “Zone numbers”](#zone-numbers) Zones are numbered in **reading order**: top to bottom, then left to right. Zone 1 is always the top-left zone. These are the numbers used by [Share Zone](/docs/guides/share-a-zone/) and its hotkeys, and in the editor’s zone table. ## Work area vs Cover taskbar [Section titled “Work area vs Cover taskbar”](#work-area-vs-cover-taskbar) By default zones divide the monitor’s **work area**, which is the screen minus the taskbar. Confined and snapped windows never go under the taskbar. Turn on **Cover taskbar** for a screen to make its zones divide the **full monitor** instead. The Windows taskbar is always on top, so it still draws over the bottom strip unless you set it to auto-hide (*Windows Settings → Personalization → Taskbar → Taskbar behaviors → Automatically hide the taskbar*). ## When there are no layouts [Section titled “When there are no layouts”](#when-there-are-no-layouts) If you delete every layout on a screen, the dropdown shows **No layouts**, the Start button becomes **Add** (which opens the editor), and that screen is not confined. # VirtualZones command-line options > Command-line flags supported by VirtualZones.exe (--tray, --list-monitors, --uninstall-cleanup) and how relaunching behaves. | Flag | What it does | | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `--tray` | Start hidden in the tray instead of showing the main window. The *Start with Windows* entry uses this | | `--list-monitors` | Write every detected monitor (name, primary flag, bounds, work area, hardware ID) to `%TEMP%\virtualzones.log`, then exit. Useful when [copying layouts](/docs/reference/files-and-data/#backing-up-or-copying-layouts) or reporting multi-monitor bugs | | `--uninstall-cleanup` | Remove the *Start with Windows* registry entry and exit without showing any UI. The uninstaller runs this | Example (PowerShell): ```powershell & "$env:LOCALAPPDATA\Programs\VirtualZones\VirtualZones.exe" --list-monitors notepad "$env:TEMP\virtualzones.log" ``` ## No scripting commands [Section titled “No scripting commands”](#no-scripting-commands) There are no flags to start or stop confinement, switch layouts or share zones from the command line. Use the [global hotkeys](/docs/reference/hotkeys/) instead. You can send them from tools like AutoHotkey. ## Relaunching [Section titled “Relaunching”](#relaunching) Starting `VirtualZones.exe` while it’s already running **replaces** the running copy rather than opening a second one. The new instance asks the old one to exit, waits for it, then takes over. # Where VirtualZones stores settings (settings.json) and data > Where VirtualZones stores settings, layouts, license, trial and language files, the settings.json format with an example, and how to back up or copy layouts to another PC. ## Where everything lives [Section titled “Where everything lives”](#where-everything-lives) | What | Location | Notes | | -------------------------------------- | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | | Settings and layouts | `%APPDATA%\VirtualZones\settings.json` | JSON, [format below](#settingsjson) | | Usage counter (About → “Used N times”) | `%APPDATA%\VirtualZones\usage.dat` | Local only, never sent anywhere. Kept separate from `settings.json` since 1.3.15 so an older copy can’t reset it | | License | `%APPDATA%\VirtualZones\license.dat` | Encrypted with Windows DPAPI for your user on this PC, so it won’t work if copied elsewhere | | Trial start date | `%APPDATA%\VirtualZones\trial.v2.dat` and registry `HKCU\Software\VirtualZones` | Encrypted | | Language files | `%APPDATA%\VirtualZones\lang\.lang` | Downloaded translations, used offline | | Start with Windows | Registry `HKCU\Software\Microsoft\Windows\CurrentVersion\Run`, value `VirtualZones` | Contains `"" --tray` | | Diagnostic log | `%TEMP%\virtualzones.log` | Plain text. Never contains your license key. Attach it to bug reports | | Downloaded update | `%TEMP%\VirtualZones-Update-Setup.exe` | Only while an update is pending | | Program | `%LOCALAPPDATA%\Programs\VirtualZones\` (or `C:\Program Files\VirtualZones\` for all users) | | Tip: paste `%APPDATA%\VirtualZones` into the File Explorer address bar to open the folder. ## settings.json [Section titled “settings.json”](#settingsjson) Exit first VirtualZones reads `settings.json` only at startup and rewrites it often. **Exit from the tray before editing it**, or your changes will be overwritten. Keep the structure exactly as the app writes it: it uses a small, strict parser. Example: ```json { "AutoStart": true, "AccentColor": "#a855f7", "Theme": "auto", "Language": "en", "HideToTray": true, "StartMinimized": false, "UpdateAutomatically": false, "HotkeyStartStop": [3, 82], "HotkeyToggleZones": [3, 90], "HotkeyCycleLayout": [3, 67], "HotkeyMoveLeft": [3, 65], "HotkeyMoveRight": [3, 68], "HotkeyMoveUp": [3, 87], "HotkeyMoveDown": [3, 83], "HotkeyShareZone1": [3, 49], "HotkeyShareZone2": [3, 50], "HotkeyShareZone3": [3, 51], "HotkeyShareZone4": [0, 0], "Screens": [ { "Id": "MONITOR\\SAM0F9D\\{4d36e96e-e325-11ce-bfc1-08002be10318}\\0003", "Name": "C49RG9x", "Enabled": true, "CoverTaskbar": false, "ActiveLayout": "25% | 50% | 25%" } ], "ScreenLayouts": [ { "Screen": "MONITOR\\SAM0F9D\\{4d36e96e-e325-11ce-bfc1-08002be10318}\\0003", "Name": "25% | 50% | 25%", "Zones": [[0, 0, 0.25, 1], [0.25, 0, 0.75, 1], [0.75, 0, 1, 1]] }, { "Screen": "MONITOR\\SAM0F9D\\{4d36e96e-e325-11ce-bfc1-08002be10318}\\0003", "Name": "Quad", "Zones": [[0, 0, 0.5, 0.5], [0.5, 0, 1, 0.5], [0, 0.5, 0.5, 1], [0.5, 0.5, 1, 1]] } ], "SelectedScreen": "MONITOR\\SAM0F9D\\{4d36e96e-e325-11ce-bfc1-08002be10318}\\0003" } ``` ### Screens and layouts [Section titled “Screens and layouts”](#screens-and-layouts) * `Screens` holds one entry per monitor ever seen. `Id` is the monitor’s hardware ID. Run [`--list-monitors`](/docs/reference/command-line/) to see yours. * `ScreenLayouts` is a flat list of every layout. Each entry is tagged with the `Screen` it belongs to. Layouts tagged with an unknown screen ID are dropped. * `Zones` are `[left, top, right, bottom]` as fractions from 0 to 1 of the screen area. * Layout names can’t contain `"` `\` `{` `}` `[` `]`. * Missing keys fall back to their defaults. A hand-edited layout that doesn’t form a clean grid still works for confinement, but can’t be opened in the [editor](/docs/guides/custom-layouts/). ### Hotkeys in settings.json [Section titled “Hotkeys in settings.json”](#hotkeys-in-settingsjson) Each hotkey is `[modifiers, key]`: * **modifiers** add up: Alt = 1, Ctrl = 2, Shift = 4, Win = 8. So `Ctrl`+`Alt` = `3`. * **key** is the Windows virtual-key code: letters A–Z are 65–90, digits 0–9 are 48–57. * `[0, 0]` means unbound. The keys are `HotkeyStartStop`, `HotkeyToggleZones`, `HotkeyCycleLayout`, `HotkeyMoveLeft`, `HotkeyMoveRight`, `HotkeyMoveUp`, `HotkeyMoveDown` and `HotkeyShareZone1` to `HotkeyShareZone9`. The [Keyboard Shortcuts dialog](/docs/reference/hotkeys/#changing-a-hotkey) is the easier way to change them. ## Backing up or copying layouts [Section titled “Backing up or copying layouts”](#backing-up-or-copying-layouts) There’s no import/export button. To back up or move layouts: 1. Exit VirtualZones from the tray. 2. Copy `%APPDATA%\VirtualZones\settings.json`. 3. On another PC, the `Screen` values in `ScreenLayouts` must match **that** PC’s monitor IDs. Run `VirtualZones.exe --list-monitors` there, then update the `Screen` (and `Screens[].Id`) values before starting VirtualZones. Don’t copy `license.dat` or `trial.v2.dat`. They are encrypted to the original PC and won’t work. To move a license, use [Deactivate](/docs/licensing/move-or-deactivate/). # VirtualZones keyboard shortcuts (hotkeys) reference > Every VirtualZones global hotkey with its default binding, whether confinement must be running, how to rebind it, plus mouse and in-app shortcuts. ## Global hotkeys [Section titled “Global hotkeys”](#global-hotkeys) These work from anywhere in Windows. All of them can be rebound. | Action | Default | Needs confinement running? | Notes | | ----------------- | ---------------- | -------------------------- | ------------------------------------------------------------------------- | | Start / Stop | `Ctrl`+`Alt`+`R` | No | Toggles [confinement](/docs/guides/confinement/) | | Hide / Show zones | `Ctrl`+`Alt`+`Z` | Yes | Hides the borders only. Confinement keeps running | | Cycle layout | `Ctrl`+`Alt`+`C` | No | Next layout on the **selected screen**, wrapping around | | Move window up | `Ctrl`+`Alt`+`W` | Yes | [Moving windows](/docs/guides/moving-windows/) | | Move window left | `Ctrl`+`Alt`+`A` | Yes | Crosses to the next monitor at the edge | | Move window down | `Ctrl`+`Alt`+`S` | Yes | | | Move window right | `Ctrl`+`Alt`+`D` | Yes | | | Share Zone 1 | `Ctrl`+`Alt`+`1` | No | [Share a zone](/docs/guides/share-a-zone/) on the active window’s monitor | | Share Zone 2 | `Ctrl`+`Alt`+`2` | No | | | Share Zone 3 | `Ctrl`+`Alt`+`3` | No | | | Share Zone 4 to 9 | *Unbound* | No | Assign them if you use layouts with more zones | ## Mouse and in-app shortcuts [Section titled “Mouse and in-app shortcuts”](#mouse-and-in-app-shortcuts) These can’t be changed. | Where | Shortcut | Action | | -------------------- | --------------------------------------------- | -------------------------------------------------------------------- | | Any window | Hold `Shift` while dragging the title bar | [Drag-to-snap](/docs/guides/drag-to-snap/) into the highlighted zone | | Layout editor canvas | Click inside a zone | Split vertically (side by side) | | Layout editor canvas | `Shift`+click inside a zone | Split horizontally (stacked) | | Layout editor canvas | Click a shared border | Merge two zones | | Layout editor | `Esc` / `Enter` | Close / Save | | Main window | `Tab`, `Shift`+`Tab`, `Space`, `Enter`, `Esc` | Move focus, activate, close dropdown | | License dialog | `Enter` / `Esc` | Activate / Close | ## Changing a hotkey [Section titled “Changing a hotkey”](#changing-a-hotkey) 1. Click **Keyboard Shortcuts…** in the Preferences card. 2. Click **Change** next to an action. The button reads `Press keys…`. 3. Press the new combination. `Esc` cancels. 4. Click **Save**. Nothing changes until you save, and **Cancel** discards everything. **Clear** leaves an action `Unbound`. A new combination is rejected with a message if: | Message | Why | | -------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | | `Hotkeys need at least one modifier key (Ctrl/Alt/Shift/Win).` | A single key would hijack normal typing | | `That combo is reserved by Windows.` | `Ctrl`+`Shift`+`Esc`, `Alt`+`F4`, `Alt`+`Tab`, `Ctrl`+`Alt`+`Del`, or **any combination with the Windows key** | | `Already used by {action}.` | Another VirtualZones action already uses it | | `Already in use by another app.` | Another running app has registered it | While the Keyboard Shortcuts dialog is open, all VirtualZones hotkeys are paused. ## Troubleshooting hotkeys [Section titled “Troubleshooting hotkeys”](#troubleshooting-hotkeys) ### A hotkey stopped working [Section titled “A hotkey stopped working”](#a-hotkey-stopped-working) If another app registers the same combination **after** you set it, the VirtualZones hotkey silently fails the next time VirtualZones starts. Open **Keyboard Shortcuts…** and rebind it. The dialog checks availability live. ### Hotkeys and AltGr keyboards [Section titled “Hotkeys and AltGr keyboards”](#hotkeys-and-altgr-keyboards) On many European keyboard layouts, `Ctrl`+`Alt` is the same as **AltGr**, which types characters such as `@`, `€` or `{`. If a VirtualZones hotkey swallows a character you need, rebind it, for example to `Ctrl`+`Shift`+`Alt`+key. ### A binding shows as `Ctrl+Alt+?` [Section titled “A binding shows as Ctrl+Alt+?”](#a-binding-shows-as-ctrlalt) The dialog only has display names for letters, digits, `F4`, `Tab`, `Esc` and `Delete`. Other keys such as `F1`–`F12` or the arrow keys show as `?` but **work normally**. ### Older versions [Section titled “Older versions”](#older-versions) Versions before 1.0 used different defaults (for example `Ctrl`+`Alt`+arrow keys to move windows). If you’ve upgraded from an early version, your old bindings were kept. Check **Keyboard Shortcuts…** to see your current ones. ## How hotkeys are stored [Section titled “How hotkeys are stored”](#how-hotkeys-are-stored) See [Settings → settings.json](/docs/reference/files-and-data/#hotkeys-in-settingsjson). # VirtualZones status and error messages explained > Every message VirtualZones can show, in the main window, License dialog, Keyboard Shortcuts and layout editor, with what each one means and what to do. Messages are shown here in English. The app shows them in your [chosen language](/docs/guides/appearance-and-language/#language). ## Main window [Section titled “Main window”](#main-window) | Message | Meaning | What to do | | ----------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------- | | `Active: fullscreen/maximize snaps to zones; Shift-drag to snap.` | Confinement is running | Nothing | | `Idle` | Confinement is stopped | Press **Start** or `Ctrl`+`Alt`+`R` | | `No layouts yet - click Add to create one.` | The selected screen has no layouts | Click **Add**, or **Restore Defaults** in the editor | | `No layouts` (in the dropdown) | Same as above | Same as above | | `Trial: N day(s) left.` | Trial days remaining | [Buy a license](/docs/licensing/trial-and-plans/) any time | | `Trial expired - click License to activate` | The trial is over and no license is active, so confinement is disabled | [Activate a license](/docs/licensing/activate/) | | `Licensed to {name}` / `Licensed.` | A valid license is active | Nothing | ## License dialog [Section titled “License dialog”](#license-dialog) | Message | Meaning | What to do | | --------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | | `Activation requires an internet connection.` | Informational | | | `Please enter a license key.` | The key field is empty | Paste your key from the purchase email | | `Verifying license with Lemon Squeezy…` | Contacting the license server | Wait a few seconds | | `License activated. Thank you for supporting VirtualZones!` | Success | The dialog closes by itself | | `That license key isn't valid.` | The server didn’t recognize the key | Check for missing characters or extra spaces, and copy it again from the email | | `This license key isn't for VirtualZones.` | The key belongs to a different product | Check you’re using the VirtualZones key, or [contact support](/docs/help/faq/#how-do-i-contact-support) | | An activation-limit message from the server | The key is already active on its maximum number of devices | Since 1.3.16 you’re offered to move the license to this computer. See [Move a license](/docs/licensing/move-or-deactivate/) | | `Couldn't reach the license server ({reason}). Check your internet connection and try again.` | Network problem. Nothing was changed | Check your connection, proxy or firewall for `api.lemonsqueezy.com` | | `Deactivating this device…` | Contacting the license server | Wait | | `This device has been deactivated. You can now activate your license on another computer.` | Success | Activate on the new PC | | `Couldn't deactivate this device ({reason}). Check your internet connection and try again.` | Network problem. The license is still active here | Try again when online | The `{reason}` in network errors is one of: `could not open a network session`, `could not reach api.lemonsqueezy.com`, `could not open the request`, `could not send the request (are you offline?)` or `no response from the server`. ## Keyboard Shortcuts dialog [Section titled “Keyboard Shortcuts dialog”](#keyboard-shortcuts-dialog) | Message | Meaning | | -------------------------------------------------------------- | --------------------------------------------------------------------- | | `Press keys…` | Waiting for you to press the new combination (`Esc` cancels) | | `Unbound` | No hotkey assigned | | `Hotkeys need at least one modifier key (Ctrl/Alt/Shift/Win).` | Add Ctrl, Alt or Shift | | `That combo is reserved by Windows.` | Choose another combination. Anything with the Windows key is reserved | | `Already used by {action}.` | Another VirtualZones action uses it | | `Already in use by another app.` | Another running app registered it first | ## Layout editor [Section titled “Layout editor”](#layout-editor) | Message | Meaning | | ---------------------------------------------------------------------------------- | ------------------------- | | `Please enter a name for this layout.` | Type a name before saving | | `Layout names can't contain ", \, {, }, [, or ].` | Remove those characters | | `No custom layouts yet - click Add to create one, or Restore Defaults.` | The screen has no layouts | | `Click a zone to split it (Shift = horizontal)` / `Click a shared border to merge` | Canvas hints | ## Update dialog [Section titled “Update dialog”](#update-dialog) `VirtualZones {version} is available`: see [Updates](/docs/guides/updates/). # VirtualZones privacy: every network request listed > A complete list of every network request VirtualZones makes, what data each one sends, what stays on your PC, and which Windows capabilities the app uses. VirtualZones has **no telemetry, no analytics, no ads and no account.** This page lists **every** network request the app makes, so you can verify that for yourself or allow it through a firewall. All requests use HTTPS (port 443) through Windows’ built-in WinHTTP, and they follow your system proxy settings. ## Every network request [Section titled “Every network request”](#every-network-request) | When | Where | What is sent | Why | | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | | Every launch | `raw.githubusercontent.com` (`languages.json`) | A standard HTTPS request only (your IP address and the app’s user agent) | Get the list of available UI languages | | Every launch if your language isn’t English, and when you choose a language | `raw.githubusercontent.com` (the `.lang` file) | Same as above | Download or refresh the translation | | At launch and about every 24 h (not in Microsoft Store builds) | `api.github.com` (latest release), then GitHub’s release download servers | Same as above | [Check for updates](/docs/guides/updates/) | | When you accept an update, or automatically if **Update automatically** is on | GitHub release download servers | Same as above | Download the installer | | When you click **Activate** | `api.lemonsqueezy.com` | Your **license key** and your **PC’s computer name** (so you can recognize the device in your Lemon Squeezy order page) | [Activate the license](/docs/licensing/activate/) | | About every 14 days while licensed | `api.lemonsqueezy.com` | License key and activation ID | Confirm the license is still valid | | When you click **Deactivate** | `api.lemonsqueezy.com` | License key and activation ID | Free this PC’s activation | **Buy License**, the website link and **Contact me** simply open your browser or email app. VirtualZones itself sends nothing. To block all of this, block `VirtualZones.exe` in your firewall. Everything except language downloads, updates and license activation keeps working. A license stays valid offline for up to [30 days](/docs/licensing/activate/#offline-use) since it was last checked. ## What stays on your PC [Section titled “What stays on your PC”](#what-stays-on-your-pc) * Your settings, layouts and hotkeys (`settings.json`). * Your license record, encrypted with Windows DPAPI (`license.dat`). * Your usage counter (the “Used N times” line in About). **It is never sent anywhere.** * The diagnostic log in `%TEMP%`. It never contains your license key, and it’s only shared if you attach it to a bug report yourself. See [Files & data locations](/docs/reference/files-and-data/). ## Windows capabilities used [Section titled “Windows capabilities used”](#windows-capabilities-used) | Capability | Used for | | --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Window event hooks | Noticing when a window maximizes or goes fullscreen | | Low-level mouse hook | Shift-drag snapping. Installed only while confinement runs. Nothing is recorded | | Global hotkeys | [Hotkeys](/docs/reference/hotkeys/) | | Moving and resizing other apps’ windows | Confinement, snapping and move hotkeys | | The min/max animation setting | Turned off while running, restored on Stop or exit ([why](/docs/guides/confinement/#the-animation-setting)) | | GPU desktop duplication | **Only** for zones you explicitly [share](/docs/guides/share-a-zone/). Frames stay on your GPU and are shown in a local window. Your meeting app does the transmitting | VirtualZones needs no administrator rights and installs no driver or service. ## Payments [Section titled “Payments”](#payments) Purchases are handled by **Lemon Squeezy** (a Stripe company) as merchant of record. VirtualZones never sees your payment details. See the [website privacy policy](https://virtualzones.cc/privacy). # VirtualZones settings reference: every option and default > Every VirtualZones setting with its exact label, default value, what it does and where it is stored. Preferences toggles, per-screen options, theme, color and language. All settings are saved automatically to `%APPDATA%\VirtualZones\settings.json` ([format](/docs/reference/files-and-data/#settingsjson)). ## Preferences [Section titled “Preferences”](#preferences) | Setting (exact label) | Default | What it does | Stored as | | ----------------------------- | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | | **Show zones** | On each Start | Shows or hides the zone borders. Confinement keeps running when hidden. Greyed out while stopped. Same as `Ctrl`+`Alt`+`Z` | Not saved: borders show again on every Start | | **Start confining on launch** | Off | Presses Start automatically when VirtualZones launches | `AutoStart` | | **Cover taskbar** | Off | For the **selected screen**: zones span the full monitor instead of stopping at the taskbar. The taskbar still draws on top unless it’s set to auto-hide. Changing it restarts confinement and closes that screen’s shares | `Screens[].CoverTaskbar` | | **Start with Windows** | Off | Launches VirtualZones hidden in the tray when you sign in | Registry: `HKCU\Software\Microsoft\Windows\CurrentVersion\Run` → `VirtualZones` | | **Show in tray** | On | Keeps a tray icon. Closing the window hides it to the tray instead of quitting. Turn it off to make ✕ exit | `HideToTray` | | **Start minimized** | Off | Starts hidden in the tray on every launch (the tray icon is shown even if Show in tray is off) | `StartMinimized` | | **Update automatically** | Off | Downloads and verifies updates in the background, then asks you to install. When off, you’re asked before downloading. See [Updates](/docs/guides/updates/) | `UpdateAutomatically` | | **Keyboard Shortcuts…** | See [Hotkeys](/docs/reference/hotkeys/) | Rebind global hotkeys | `Hotkey*` | | **App color…** | Purple `#a855f7` | Accent color for the UI, zone borders, snap highlight and share frame. See [Appearance](/docs/guides/appearance-and-language/#app-color) | `AccentColor` | ## Per-screen settings [Section titled “Per-screen settings”](#per-screen-settings) Set on the selected screen tab. See [Multiple monitors](/docs/guides/multiple-monitors/). | Setting | Default for a new monitor | Stored as | | ------------------ | -------------------------------------------------------------- | ------------------------ | | **Enabled** | On | `Screens[].Enabled` | | **Cover taskbar** | Off | `Screens[].CoverTaskbar` | | **Current Layout** | `100%` | `Screens[].ActiveLayout` | | Layouts | `50% \| 50%`, `33% \| 33% \| 33%`, `25% \| 50% \| 25%`, `100%` | `ScreenLayouts` | ## Title bar [Section titled “Title bar”](#title-bar) | Setting | Options | Default | Stored as | | -------- | ----------------- | ------- | ------------------------------------------ | | Theme | Light, Auto, Dark | Dark | `Theme` (`"light"`, `"auto"`, `"dark"`) | | Language | 26 languages | English | `Language` (for example `"de"`, `"pt-BR"`) | ## Remembered automatically [Section titled “Remembered automatically”](#remembered-automatically) | What | Stored as | | ---------------------------- | ----------------------------------------------------------------------------------- | | Main window position | `WindowPos` | | Last selected screen tab | `SelectedScreen` | | A version you chose to skip | `SkippedUpdateVersion` | | Usage counter shown in About | Its own file, `usage.dat` (since 1.3.15; older versions kept it in `settings.json`) | ## What VirtualZones doesn’t have [Section titled “What VirtualZones doesn’t have”](#what-virtualzones-doesnt-have) So you don’t have to look for them: there are **no per-app rules**, no app exclusion list, no “always open app X in zone Y”, no saved window positions or workspaces, and no import/export button for layouts. The only windows left alone automatically are the [built-in exceptions](/docs/guides/confinement/#windows-that-are-never-confined). ## Resetting everything [Section titled “Resetting everything”](#resetting-everything) Exit VirtualZones from the tray, then delete or rename `%APPDATA%\VirtualZones\settings.json`. The next launch starts with defaults. Your license and trial status are stored separately and aren’t affected. # Using these docs with AI assistants > Machine-readable entry points (llms.txt, llms-full.txt, llms-small.txt) and answering guidelines for ChatGPT, Claude, Copilot, Perplexity and other AI tools helping VirtualZones users. These docs are written to be read by people **and** by AI assistants. If you are an AI system answering a question about VirtualZones, use the sources below — they are the authoritative, up-to-date reference maintained by the developer. ## Machine-readable entry points [Section titled “Machine-readable entry points”](#machine-readable-entry-points) | URL | What it contains | Best for | | ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | | [`/docs/llms.txt`](/docs/llms.txt) | Index of every docs page with a one-line summary and link, following the [llms.txt](https://llmstxt.org) convention | Discovering which page answers a question | | [`/docs/llms-full.txt`](/docs/llms-full.txt) | The **entire** documentation as one plain-text Markdown file | Loading all context in one request | | [`/docs/llms-small.txt`](/docs/llms-small.txt) | A condensed version of the full docs (non-essential detail trimmed) | Smaller context windows | | [`https://virtualzones.cc/llms.txt`](https://virtualzones.cc/llms.txt) | Product-level summary: pricing, positioning, key facts | Sales / “what is it” questions | | [`/docs/sitemap-index.xml`](/docs/sitemap-index.xml) | Every page URL | Crawlers | Every page is plain semantic HTML with one `

`, question-shaped headings and tables, so it extracts cleanly without JavaScript. ## Guidelines for answering user questions [Section titled “Guidelines for answering user questions”](#guidelines-for-answering-user-questions) * **Use exact names.** Quote setting names, menu items and hotkeys exactly as written here (for example `Ctrl`+`Alt`+`R`, **Cover taskbar**, **Edit Layouts…**). Users look for those strings in the app. * **Mention the known limitations honestly.** Exclusive-fullscreen games need borderless windowed mode. See [Troubleshooting](/docs/help/troubleshooting/). * **VirtualZones is not a virtual display driver.** It confines real windows into regions of a physical monitor; Windows still sees one monitor. Don’t suggest driver-level steps. * **Pricing and purchase:** link to rather than quoting prices from memory, as they can change. * **Download:** . * **Link the specific page** you drew the answer from so the user can verify it. ## Quick facts for AI [Section titled “Quick facts for AI”](#quick-facts-for-ai) * **What:** a native Windows 10/11 app (Mac version coming soon) that splits one monitor into zones that behave like separate monitors, confines maximized/fullscreen windows inside a zone, and can share a single zone into Zoom, Teams, Google Meet or OBS. * **Who makes it:** napps (nappsllc). Contact: . * **Privacy:** no telemetry, no account, no ads. See [Privacy & network](/docs/reference/privacy-and-network/). * **Fresh install:** confinement is **off** until the user presses **Start** (`Ctrl`+`Alt`+`R`), and each monitor starts on the single-zone `100%` layout. Users must pick a split layout such as `25% | 50% | 25%`. This is the most common “it doesn’t work” cause. * **Default hotkeys:** Start/Stop `Ctrl`+`Alt`+`R`, Hide/Show zones `Ctrl`+`Alt`+`Z`, Cycle layout `Ctrl`+`Alt`+`C`, Move window `Ctrl`+`Alt`+`W`/`A`/`S`/`D`, Share Zone 1–3 `Ctrl`+`Alt`+`1`/`2`/`3`. All rebindable in **Keyboard Shortcuts…**. * **Drag-to-snap:** hold `Shift` while dragging; confinement must be running. * **Settings file:** `%APPDATA%\VirtualZones\settings.json`. * **Supported since 1.3.16:** Chrome/Edge F11 and in-page video fullscreen stay in their zone (older versions could not hold them; tell users to update). * **Not supported:** exclusive-fullscreen games (use borderless), always-on-top windows (by design), per-app rules, layout import/export UI, Linux. **macOS: coming soon, not available yet.** # VirtualZones changelog (version history) > VirtualZones version history, from the first release to the current version, with the notable changes in each. The latest version is always on the [download page](https://virtualzones.cc/download). Your version is shown on the License card and in **About**. ## 1.3.x [Section titled “1.3.x”](#13x) | Version | Changes | | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **1.3.16** | **Move your license to this PC**: when a key is already active elsewhere, activating offers to move it here in one click; keys from the live store are accepted (1.3.15 rejected them); **Buy License** opens the pricing page; a fullscreen Chrome/Edge window stays in its zone when you switch windows; cropped fullscreen video fixed; log file capped at 5 MB | | 1.3.15 | Running an older copy can no longer erase your settings or usage count (the count moved to its own `usage.dat`); **Start with Windows** no longer turns itself back on; only the installed copy can claim Start with Windows; the License card shows **Update to \** whenever a newer version exists, even after “Skip this version” | | 1.3.14 | The License card shows **Licensed to \**, the buyer’s name from the purchase | | 1.3.13 | Clearer expired-trial state: a red `Trial expired - click License to activate` | | 1.3.12 | Translations refresh at every launch; dates follow the app language; new usage counter in About | | 1.3.11 | License and trial data now encrypted with Windows DPAPI (migrated automatically); new **Deactivate** button | | 1.3.10 | Fixed a crash when moving VirtualZones’ own window between monitors with different scaling | | 1.3.9 | Share Zone label polish; multi-monitor tray labels fully translated | | 1.3.8 | **Share Zone hotkeys are rebindable** (1–3 bound, 4–9 unbound by default); share zones on any monitor, several at once, with real monitor names in the tray; new monitors default to **100%** | | 1.3.7 | **Move hotkeys cross to the adjacent monitor** at the screen edge; new **100%** layout and template; fixed editor templates applying the wrong preset | | 1.3.6 | UI text punctuation cleanup | | 1.3.5 | Translations refresh automatically when updated | | 1.3.4 | Update dialog buttons sized to their labels | | 1.3.3 | About screen: website link on its own line | | 1.3.2 | **Full per-monitor DPI awareness** (sharp at 125/150/225%); refreshed light theme; move hotkeys work on VirtualZones’ own window; new About screen | | 1.3.1 | **Start confining on launch** is now off by default; main window kept on-screen on small displays | | 1.3.0 | **25-language UI** with a Language picker in the title bar | ## 1.0 – 1.2 [Section titled “1.0 – 1.2”](#10--12) | Version | Changes | | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **1.2.0** | **Multi-monitor support**: per-screen layouts, Enabled and Cover taskbar; screen tabs with real names and resolutions; live hot-plug; single instance; About screen | | 1.1.1 | Update dialog fixes; crisp theme icons | | **1.1.0** | **App color** picker; Light / Dark / Auto themes; move hotkeys also dock floating windows | | 1.0.1 | Redesigned update dialog | | **1.0.0** | Full redesign; layout editor with Manage/Edit views, click-to-split and click-border-to-merge; **new default hotkeys** (`Ctrl`+`Alt`+`W`/`A`/`S`/`D`, `R`, `C`); **Start minimized**; lower memory use | ## 0.x [Section titled “0.x”](#0x) | Version | Changes | | ------------ | ------------------------------------------------------------------------------------------------------------------------- | | 0.5.3 | Directional window-move hotkeys | | 0.5.2 | Share Zone frames stay on the GPU (lower CPU) | | 0.5.1 | **Edit Layouts…** moved next to the layout dropdown | | 0.5.0 | Built-in layouts became editable, with **Restore Defaults**; rebindable hotkeys | | **0.4.0** | **Share Zone** (tray and `Ctrl`+`Alt`+number); tray Start/Stop, Hide/Show and Layout menu; **Show in tray** | | 0.3.15 | Screenshot and capture overlays (ShareX etc.) are no longer pushed into zones | | 0.3.7–0.3.16 | Editor redesign with a monitor-shaped preview and exact %/px sizes; numbered zones; many fixes | | 0.3.2–0.3.6 | Per-user or all-users installer; update fixes | | 0.3.1 | Renamed to **VirtualZones** (previously “Region Confiner”); settings, trial and license carried over | | **0.3.0** | Grid layout editor, trial and license, update checks, Start with Windows, tray, **Cover taskbar**, **Shift drag-to-snap** | | 0.2.0 | Rewritten as a tiny native exe; F11 snaps to the zone under the cursor | | 0.1.0 | First release: zones, fullscreen/maximize confinement, show/hide borders | # VirtualZones FAQ > Frequently asked questions about VirtualZones. How it compares to FancyZones, whether it's a virtual display, performance, games, privacy, licensing and support. ## Is VirtualZones a virtual display driver? [Section titled “Is VirtualZones a virtual display driver?”](#is-virtualzones-a-virtual-display-driver) No. Windows still sees one physical monitor. VirtualZones resizes windows into zones as they maximize or go fullscreen, so there’s no driver, no admin rights and no performance cost: apps render natively. The trade-off is that exclusive-fullscreen games, which bypass the desktop compositor, can’t be held; use their borderless windowed mode. Browser fullscreen (F11) works in Chrome, Edge and Firefox. See [What is VirtualZones?](/docs/) ## How is it different from PowerToys FancyZones? [Section titled “How is it different from PowerToys FancyZones?”](#how-is-it-different-from-powertoys-fancyzones) FancyZones snaps windows into zones when you drag them, but **maximize and fullscreen still cover the whole monitor**. VirtualZones does drag-to-snap too, and also makes maximize, F11, slideshows and video players stay inside the zone, as if each zone were a real monitor. It can also [share a single zone](/docs/guides/share-a-zone/) into meetings. It’s one small exe instead of a large utility suite. ## Can I use it with FancyZones at the same time? [Section titled “Can I use it with FancyZones at the same time?”](#can-i-use-it-with-fancyzones-at-the-same-time) Yes, but both use Shift-drag by default. Turn off FancyZones’ Shift-drag or turn off one of the tools to avoid double snapping. ## Does it slow down apps or games? [Section titled “Does it slow down apps or games?”](#does-it-slow-down-apps-or-games) No. Confined windows render natively. The app only reacts to window events. Only [Share Zone](/docs/guides/share-a-zone/) captures anything, on the GPU, and only while a zone is shared. ## Does it work with multiple monitors? [Section titled “Does it work with multiple monitors?”](#does-it-work-with-multiple-monitors) Yes. Each monitor has its own layouts, and the move hotkeys cross between monitors. See [Multiple monitors](/docs/guides/multiple-monitors/). ## Does it work at 125% / 150% scaling? [Section titled “Does it work at 125% / 150% scaling?”](#does-it-work-at-125--150-scaling) Yes. It’s fully per-monitor DPI aware, including mixed scaling across monitors. ## Can zones be rows, or a 2×2 grid? [Section titled “Can zones be rows, or a 2×2 grid?”](#can-zones-be-rows-or-a-22-grid) Yes. The [layout editor](/docs/guides/custom-layouts/) builds any grid of up to 6×6, with splits and merges. ## Can I assign apps to zones automatically? [Section titled “Can I assign apps to zones automatically?”](#can-i-assign-apps-to-zones-automatically) No. There are no per-app rules or saved workspaces. Windows go into the zone where you maximize or drop them. ## Does it need internet? [Section titled “Does it need internet?”](#does-it-need-internet) No, apart from license activation (plus a re-check about every 14 days, with a 30-day grace period), language downloads and update checks. See [Privacy & network](/docs/reference/privacy-and-network/). ## Does it collect data? [Section titled “Does it collect data?”](#does-it-collect-data) No telemetry, no analytics, no account. [Every network request is listed here](/docs/reference/privacy-and-network/). ## What happens when the trial ends? [Section titled “What happens when the trial ends?”](#what-happens-when-the-trial-ends) Confinement, snapping and the move hotkeys stop until you activate a license. Your settings and layouts are kept. See [Trial & plans](/docs/licensing/trial-and-plans/). ## How do I move my license to a new PC? [Section titled “How do I move my license to a new PC?”](#how-do-i-move-my-license-to-a-new-pc) Click **Deactivate** in the License dialog on the old PC, then activate on the new one. See [Move a license](/docs/licensing/move-or-deactivate/). ## Which languages are supported? [Section titled “Which languages are supported?”](#which-languages-are-supported) 26 UI languages. See [Theme, color & language](/docs/guides/appearance-and-language/#language). ## Is there a Mac version? [Section titled “Is there a Mac version?”](#is-there-a-mac-version) **Coming soon.** VirtualZones is Windows-only today (Windows 10 and 11). A macOS version is in the works. There are no plans for Linux yet. ## How do I contact support? [Section titled “How do I contact support?”](#how-do-i-contact-support) * In the app: **About → Contact me** opens an email to the developer. * Email: Include your version (shown on the License card) and, for bugs, the log file `%TEMP%\virtualzones.log`. # VirtualZones glossary of terms > Definitions of the terms used in VirtualZones and its documentation. Zone, layout, confinement, work area, Cover taskbar, Share Zone, activation and more. | Term | Meaning | | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- | | **Zone** | A rectangular region of a monitor that behaves like its own monitor | | **Layout** | A named set of zones for one monitor, such as `25% \| 50% \| 25%` | | **Built-in layouts** | `50% \| 50%`, `33% \| 33% \| 33%`, `25% \| 50% \| 25%` and `100%`, added to every new monitor. Editable, and restorable with **Restore Defaults** | | **Template** | A layout-editor button that loads a built-in layout’s shape as a starting point | | **Current Layout** | The layout in use on a monitor | | **Selected screen** | The monitor whose tab is open in the main window. The layout dropdown, editor, tray Layout menu and cycle hotkey act on it | | **Confinement** | Resizing maximized or fullscreen windows into their zone. Turned on with **Start** and off with **Stop** | | **Work area** | The part of a monitor not covered by the taskbar | | **Cover taskbar** | A per-monitor option that makes zones use the full monitor instead of the work area | | **Drag-to-snap** | Holding `Shift` while dragging a window to drop it into the highlighted zone | | **Move hotkeys** | `Ctrl`+`Alt`+`W`/`A`/`S`/`D`, which move the focused window between zones and monitors | | **Share Zone** | Mirroring one zone into a window called `VirtualZones - Share Zone N` that meeting and streaming apps can share | | **Share frame** | The dashed outline around a shared zone. Only you see it | | **Zone borders** | The thin solid lines showing zones while confinement runs | | **App color** | The accent color you choose for the UI and zone borders (default purple) | | **Trial** | 7 days of full use from first launch | | **License key** | The key from your purchase email, entered in the License dialog | | **Activation** | Registering a PC against your license key. One device at a time | | **Deactivate** | Releasing this PC’s activation so the key can be used elsewhere | | **Validation** | The silent license re-check about every 14 days | | **Grace period** | Up to 30 days of licensed use without a successful check | | **Elevated window** | A window running as administrator. Normal apps, including VirtualZones, can’t move it | | **Exclusive fullscreen** | A game mode that bypasses the desktop compositor and can’t be confined. Use borderless windowed instead | # VirtualZones troubleshooting: common problems and fixes > Fixes for common VirtualZones problems. Browser fullscreen, games, always-on-top apps, the taskbar, hotkeys, Shift-drag, Share Zone, admin windows, SmartScreen and more. ## Nothing happens when I maximize a window [Section titled “Nothing happens when I maximize a window”](#nothing-happens-when-i-maximize-a-window) Check, in this order: 1. **Confinement is running.** The status should say `Active…`, not `Idle`. Press **Start** or `Ctrl`+`Alt`+`R`. 2. **The screen is Enabled.** Check the **Enabled** switch on that monitor’s tab. 3. **A split layout is active.** New monitors use `100%` (one zone), which looks exactly like a normal maximize. Pick `25% | 50% | 25%` or another split. 4. **The trial hasn’t expired.** A red `Trial expired` message means you need to [activate a license](/docs/licensing/activate/). 5. The window isn’t **always on top** or **elevated**. See below. ## A browser’s fullscreen fills the whole monitor [Section titled “A browser’s fullscreen fills the whole monitor”](#a-browsers-fullscreen-fills-the-whole-monitor) Since **version 1.3.16**, Chrome and Edge fullscreen (F11, or a video’s fullscreen button such as YouTube’s) stays in its zone, also when you click another browser window, and follows the window when you move it with `Ctrl`+`Alt`+`W`/`A`/`S`/`D`. Firefox F11 is confined too. **Fix:** update VirtualZones. The version is on the License card; older versions couldn’t hold Chrome or Edge fullscreen in a zone. ## A game isn’t confined [Section titled “A game isn’t confined”](#a-game-isnt-confined) Exclusive-fullscreen DirectX games bypass the Windows desktop compositor, so no window manager can resize them. **Fix:** set the game to **Borderless windowed** (sometimes called *Windowed fullscreen* or *Fullscreen windowed*) in its video settings. It then confines like any other window. ## An always-on-top app isn’t confined [Section titled “An always-on-top app isn’t confined”](#an-always-on-top-app-isnt-confined) Windows marked **always on top**, and tool windows, are skipped on purpose so screenshot and capture overlays (ShareX, Snipping Tool, OBS) aren’t pushed into zones. This includes mini players, picture-in-picture and “pin on top” utilities. **Fix:** turn off the app’s always-on-top option, or place it manually with [Shift-drag](/docs/guides/drag-to-snap/) or a [move hotkey](/docs/guides/moving-windows/), which do work on these windows. ## Admin windows won’t move or confine [Section titled “Admin windows won’t move or confine”](#admin-windows-wont-move-or-confine) Task Manager, Registry Editor, administrator terminals and apps you ran “as administrator” are elevated. Windows doesn’t allow a normal app to move elevated windows. **Fix:** leave them unconfined, or run VirtualZones itself as administrator if you need to manage elevated windows. ## A window covers the taskbar [Section titled “A window covers the taskbar”](#a-window-covers-the-taskbar) **Cover taskbar** is on for that screen, so zones span the full monitor. Turn it off, or set the Windows taskbar to auto-hide. See [Work area vs Cover taskbar](/docs/guides/zones-and-layouts/#work-area-vs-cover-taskbar). ## A window flashes full-screen for a moment [Section titled “A window flashes full-screen for a moment”](#a-window-flashes-full-screen-for-a-moment) VirtualZones resizes a window just **after** it goes fullscreen, so one frame (about 16 ms) can flash at full size. Maximize flashes are hidden by turning off the Windows min/max animation while running. F11 can still flash once. This is cosmetic. ## Windows’ minimize/maximize animation stays off [Section titled “Windows’ minimize/maximize animation stays off”](#windows-minimizemaximize-animation-stays-off) VirtualZones turns the animation off while running and restores it on **Stop** or **Exit**. If the app was force-closed or crashed, start and stop VirtualZones once. You can also re-enable *Animation effects* in *Settings → Accessibility → Visual effects*. ## Shift-drag doesn’t snap [Section titled “Shift-drag doesn’t snap”](#shift-drag-doesnt-snap) * Confinement must be **running**. * Keep `Shift` held **until after** you release the mouse button. Releasing Shift first cancels the snap. * Drag by the **title bar**, and move at least a few pixels. * Elevated windows can’t be moved (see above). ## A hotkey doesn’t work [Section titled “A hotkey doesn’t work”](#a-hotkey-doesnt-work) * Move hotkeys and Hide/Show zones need confinement **running**. * Another app may have taken the combination. Open **Keyboard Shortcuts…** and rebind it. The dialog checks availability. * On keyboards with **AltGr**, `Ctrl`+`Alt`+key can clash with typing. See [Hotkeys and AltGr keyboards](/docs/reference/hotkeys/#hotkeys-and-altgr-keyboards). * `Win`-key combinations can’t be used, because Windows reserves them. ## The shared zone isn’t in Zoom or Teams [Section titled “The shared zone isn’t in Zoom or Teams”](#the-shared-zone-isnt-in-zoom-or-teams) * Make sure the zone is actually shared: tray → **Share** should show a checkmark, and the zone has a **dashed** frame. * The zone must exist. *Share Zone 3* does nothing on a two-zone layout. * Changing the layout, **Cover taskbar** or **Enabled** closes that screen’s shares. Share again. * Pick the **window** named `VirtualZones - Share Zone N`, not a screen. See [Share a zone](/docs/guides/share-a-zone/#pick-it-in-your-meeting-app). ## A layout is missing from the editor list [Section titled “A layout is missing from the editor list”](#a-layout-is-missing-from-the-editor-list) The editor’s list shows the first 6 layouts only. The rest are still in the main dropdown and the tray menu. Delete a layout you don’t need to see the others in the editor. ## A layout won’t open in the editor [Section titled “A layout won’t open in the editor”](#a-layout-wont-open-in-the-editor) It was edited by hand in `settings.json` and doesn’t form a clean grid. It still works for confinement. Recreate it in the editor if you need to change it. ## The main window is off-screen [Section titled “The main window is off-screen”](#the-main-window-is-off-screen) VirtualZones moves the window back onto a connected monitor automatically. If that doesn’t work, exit from the tray, remove the `WindowPos` line from `settings.json`, and start again. ## The UI stays in English after choosing a language [Section titled “The UI stays in English after choosing a language”](#the-ui-stays-in-english-after-choosing-a-language) The language download failed. Check that `raw.githubusercontent.com` is reachable. Some company networks block it. ## Launching VirtualZones closed the running copy [Section titled “Launching VirtualZones closed the running copy”](#launching-virtualzones-closed-the-running-copy) This is expected. Only one copy runs at a time, and the new copy takes over. See [Command line → Relaunching](/docs/reference/command-line/#relaunching). ## “Windows protected your PC” [Section titled ““Windows protected your PC””](#windows-protected-your-pc) Microsoft Defender SmartScreen shows this for new or unsigned apps. Click **More info → Run anyway**. ## License problems [Section titled “License problems”](#license-problems) See [Activate a license → Troubleshooting](/docs/licensing/activate/#troubleshooting-activation). ## Reporting a bug [Section titled “Reporting a bug”](#reporting-a-bug) 1. Note what you did and what happened. 2. Grab the log: `%TEMP%\virtualzones.log`. It never contains your license key. 3. For multi-monitor issues, also run `VirtualZones.exe --list-monitors` first, which adds your monitor details to the log. 4. Send it via **About → Contact me** or email . # What is VirtualZones? > VirtualZones is a native Windows 10/11 app that splits a monitor into zones that behave like separate monitors, confines maximized and fullscreen windows to a zone, and shares a single zone into meeting apps. **VirtualZones** is a small native Windows app that splits each physical monitor into **zones**: rectangles that behave like separate monitors. It is built for ultrawide and super-ultrawide displays (for example a 49” 5120×1440 panel) but works on any monitor. It does four things: 1. **Confines** maximized and fullscreen windows to the zone they belong to, instead of letting them cover the whole monitor. See [Fullscreen confinement](/docs/guides/confinement/). 2. **Snaps** a window into a zone when you hold `Shift` while dragging it. See [Drag-to-snap](/docs/guides/drag-to-snap/). 3. **Moves** the focused window zone by zone, and across monitors, with `Ctrl`+`Alt`+`W`/`A`/`S`/`D`. See [Moving windows with hotkeys](/docs/guides/moving-windows/). 4. **Shares** one zone into Zoom, Teams, Google Meet or OBS through their normal “share a window” picker. See [Share a zone](/docs/guides/share-a-zone/). ## How it works (and what it is not) [Section titled “How it works (and what it is not)”](#how-it-works-and-what-it-is-not) VirtualZones is a **window manager**, not a virtual display driver. Windows still sees one physical monitor. VirtualZones watches for windows that try to take over the screen and resizes them into a zone, so apps render natively at full speed. Nothing is captured or re-encoded, except a zone you explicitly [share](/docs/guides/share-a-zone/). Because it is not a driver: * Nothing is installed at kernel level, and **no admin rights** are needed. * **Exclusive-fullscreen games** bypass the desktop compositor and can’t be held in a zone; use the game’s borderless windowed mode instead. Browser fullscreen (F11) works in Chrome, Edge and Firefox. See [Troubleshooting](/docs/help/troubleshooting/). ## At a glance [Section titled “At a glance”](#at-a-glance) | | | | --------- | --------------------------------------------------------------------------------------------------------------------- | | Platform | Windows 10 (1809+) and Windows 11, x64. Mac version coming soon | | Form | One self-contained native exe (Rust, Win32, Direct2D). No .NET or VC++ runtime | | Install | [Per-user installer](/docs/start/installation/), no admin needed | | Languages | 26 UI languages ([Appearance & language](/docs/guides/appearance-and-language/)) | | Price | 7-day free trial with everything unlocked, then a paid license. See [Trial & plans](/docs/licensing/trial-and-plans/) | | Privacy | No telemetry, no ads, no account. [Every network call is listed](/docs/reference/privacy-and-network/) | | Publisher | Napps LLC · [virtualzones.cc](https://virtualzones.cc) | ## Replaces three tools [Section titled “Replaces three tools”](#replaces-three-tools) | You’d otherwise use | For | VirtualZones equivalent | | -------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------- | | PowerToys FancyZones | Zone layouts and drag-to-snap | [Layouts](/docs/guides/zones-and-layouts/) + [Shift-drag](/docs/guides/drag-to-snap/) | | A virtual-display splitter | Keeping fullscreen apps inside a region | [Confinement](/docs/guides/confinement/) | | RegionToShare | Sharing one region of the screen | [Share Zone](/docs/guides/share-a-zone/) | ## Where to next [Section titled “Where to next”](#where-to-next) [Quick start](/docs/start/quick-start/)Pick a layout, press Start, confine your first window in a minute. [Custom layouts](/docs/guides/custom-layouts/)Split, merge and size zones in the grid editor. [Hotkeys](/docs/reference/hotkeys/)Every global hotkey and how to rebind it. [All settings](/docs/reference/settings/)Every toggle, its default and exactly what it does. [Troubleshooting](/docs/help/troubleshooting/)Games, the taskbar, admin windows, hotkeys that don't fire. [For AI assistants](/docs/ai/using-these-docs-with-ai/)llms.txt, llms-full.txt and answering guidelines. # Activate a VirtualZones license key > Enter your VirtualZones license key, what "Licensed to" means, how periodic validation and the 30-day offline grace period work, and fixes for activation errors. ## Activate your key [Section titled “Activate your key”](#activate-your-key) 1. Find your **license key** in the purchase email from Lemon Squeezy. 2. In VirtualZones, click **License…** on the License card. 3. Paste the key into **Enter your license key:**. 4. Click **Activate** or press `Enter`. You need an internet connection. 5. You’ll see `License activated. Thank you for supporting VirtualZones!` and the dialog closes. The License card now shows **`Licensed to `**, the name from your purchase. (Licenses activated before version 1.3.14 show `Licensed.` until the next online check adds the name.) Activating registers this PC under its **computer name**, so you can recognize it later. Re-activating the **same key** on the same PC doesn’t use another activation. ## Offline use [Section titled “Offline use”](#offline-use) * VirtualZones re-checks your license silently **about every 14 days** when online. This never uses an activation. * If it can’t reach the server, **nothing happens**: the license keeps working. * The license stays valid for **30 days after the last successful check**. After that, VirtualZones behaves as unlicensed (the trial-expired state) until it can check again. It retries every minute and restores the license automatically as soon as you’re online. No prompt is shown and nothing needs re-entering. So you can work offline for up to a month at a time. ## If a license is revoked [Section titled “If a license is revoked”](#if-a-license-is-revoked) If the server reports the key is no longer valid (for example after a refund, or if you deactivated it from another PC), the stored license is removed on the next check and VirtualZones returns to the trial state. ## Troubleshooting activation [Section titled “Troubleshooting activation”](#troubleshooting-activation) | You see | Fix | | ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `That license key isn't valid.` | Copy the key again from the email, with no spaces or missing characters | | An activation-limit message | The key is active on another PC. Since 1.3.16 VirtualZones offers to **move it to this computer**; click Yes. See [Move a license](/docs/licensing/move-or-deactivate/) | | `This license key isn't for VirtualZones.` | The key is for a different product. Contact support with your order email | | `Couldn't reach the license server (…)` | Check your internet connection, proxy or firewall. `api.lemonsqueezy.com` must be reachable over HTTPS | Still stuck? See [Support](/docs/help/faq/#how-do-i-contact-support). ## Where the license is stored [Section titled “Where the license is stored”](#where-the-license-is-stored) In `%APPDATA%\VirtualZones\license.dat`, encrypted with Windows DPAPI to your user account on this PC. Copying it to another computer won’t work: use [Deactivate](/docs/licensing/move-or-deactivate/) and activate there instead. # Move a VirtualZones license to a new PC > Move a VirtualZones license to a new PC: activate on the new computer and confirm the move, or deactivate the old one first. Works even if the old PC is gone. A license is activated per device. There are two ways to move it to a different computer. ## Move it from the new PC (easiest) [Section titled “Move it from the new PC (easiest)”](#move-it-from-the-new-pc-easiest) Since version 1.3.16 you don’t need the old computer: 1. On the new PC, click **License…**, enter your key and click **Activate**. 2. If the key is still active on another computer, VirtualZones asks: *“This license is already active on DESKTOP-OLD12 (since 14 Mar 2026). Move it to this computer?”* 3. Click **Yes**. The old computer’s activation is released and this one is activated. The old computer stops being licensed at its next license check (about every 14 days, or when it next starts online). A license can be moved **once every 30 days** (a multi-license key: as many times as it has licenses). If you moved it recently, VirtualZones tells you the date you can move it again. If you need it sooner, [contact support](/docs/help/faq/#how-do-i-contact-support). ## Deactivate on the old PC first [Section titled “Deactivate on the old PC first”](#deactivate-on-the-old-pc-first) If you still have the old computer, you can also free its activation there: **On the old PC:** 1. Click **License…**. 2. Click **Deactivate**. (It’s greyed out if this PC has no active license.) 3. Wait for `This device has been deactivated. You can now activate your license on another computer.` VirtualZones on that PC returns to the trial state, which is usually expired. **On the new PC:** [activate](/docs/licensing/activate/) the same key. ## Before reinstalling Windows or selling a PC [Section titled “Before reinstalling Windows or selling a PC”](#before-reinstalling-windows-or-selling-a-pc) **Deactivate first.** Deleting VirtualZones, deleting `license.dat` or wiping the PC **doesn’t** free the activation on the server. ## If the old PC is gone [Section titled “If the old PC is gone”](#if-the-old-pc-is-gone) Use [Move it from the new PC](#move-it-from-the-new-pc-easiest): it works without the old computer. If you’ve already moved the license in the last 30 days, [contact support](/docs/help/faq/#how-do-i-contact-support) with your order email and we’ll reset it. ## Deactivation failed [Section titled “Deactivation failed”](#deactivation-failed) `Couldn't deactivate this device (…)` means the server couldn’t be reached. Your license is still active on this PC. Check your connection and try again. # VirtualZones free trial and license plans > How the VirtualZones 7-day free trial works, what still works after it ends, and how to buy a license. ## The 7-day free trial [Section titled “The 7-day free trial”](#the-7-day-free-trial) * Starts the first time you run VirtualZones. No sign-up, no card. * **Every feature is unlocked** during the trial. * The License card shows `Trial: N day(s) left.` * Reinstalling doesn’t restart the trial. ## After the trial ends [Section titled “After the trial ends”](#after-the-trial-ends) The status turns red: `Trial expired - click License to activate`. | Stops working | Keeps working | | --------------------------------------------------------------------------- | ---------------------------------------------------- | | Confinement (Start is disabled; if it was running it stops within a minute) | The main window, settings, theme, color and language | | Shift-drag snapping and the move hotkeys | The layout editor and your saved layouts | | Zone borders | Your hotkey bindings, which work again once licensed | Nothing is deleted. Activate a license and everything works exactly as before. ## Buying a license [Section titled “Buying a license”](#buying-a-license) See **[virtualzones.cc/pricing](https://virtualzones.cc/pricing)** for current plans and prices. You can also click **Buy License** in the app’s License dialog. Purchases are processed by **Lemon Squeezy**, which acts as merchant of record and handles payment, tax and receipts. After checkout you receive a **license key** by email. [Activate it](/docs/licensing/activate/) in the app. Each license is for **one device** at a time. You can [move it to another PC](/docs/licensing/move-or-deactivate/) whenever you like. ## Free vs paid at a glance [Section titled “Free vs paid at a glance”](#free-vs-paid-at-a-glance) | | Trial (7 days) | Licensed | | ------------- | -------------------- | ------------------------------------------------------------------------------------------------ | | All features | ✓ | ✓ | | Updates | ✓ | ✓ | | Works offline | ✓ | ✓ (re-checked about every 14 days, with [30 days’ grace](/docs/licensing/activate/#offline-use)) | | After day 7 | Confinement disabled | Keeps working |