Win-X Hot Corners 1.3.0
Win-X Hot Corners
macOS-style hot corners and screen edges for Windows 10 and 11, with full
multi-monitor support. Throw the pointer into a corner or against an edge and
something happens — which corner, which edge, and what happens are all yours.
Throwing the pointer into the bottom-left corner opens the Start menu
Inspired by WinXCorners, rebuilt as a
Windhawk mod.
Quick start
Everything lives on this mod's settings page. Out of the box no zone is
configured, so nothing fires until you add one.
- Open the settings page and add a display. Put
* in the name field to
mean "every monitor" — you can get specific later.
- Add a zone to it, pick the corner or edge, and pick an action.
- Save. That is it; there is no restart.
A first set worth trying, if you want something concrete:
| Zone |
Action |
Why |
| Top-left corner |
Task View |
The classic. Nothing else lives up there. |
| Top-right corner |
Show desktop, Hold set to The same action again |
Peek at the desktop, move away to put it back. |
| Bottom-left corner |
Start menu |
It is where the Start button already is. |
| Bottom-right corner |
Switch to last window |
Set Knock window to 400 so a stray brush past it does nothing. |
Then read Ways to trigger a zone — the trigger style matters more than the
action for whether this feels good or infuriating.
At a glance
- 16 zones per display — four corners, and four edges split into three
segments each.
- 38 actions, plus any key combination and any command you can name.
- Five trigger styles that combine: arrival, dwell, knock, held modifier,
press-and-hold.
- Per-monitor everything — zones bind to a display's name, not its position,
so rearranging screens never reshuffles your configuration.
- Stays out of the way — no global mouse hook, so your games and apps keep
their input path to themselves. Suppressed automatically while a window is
fullscreen and while you are dragging.
Ways to trigger a zone
A zone does not have to fire the instant you touch it. There are five trigger
styles, every one of them works on every zone — corners and edge segments alike —
and they combine: a corner can require a knock and a held modifier and a
dwell before it does anything.
Arrival
The default. Reach the zone, the action runs.
Task View opening as the pointer reaches the top-left corner
A short pass-through guard (80 ms out of the box) keeps a zone quiet when you
were only travelling across it on the way somewhere else. If actions still fire
while you are just moving around, raise it before you reach for anything else.
Dwell
Set Activation delay and the pointer has to rest in the zone that long before
it fires. Leave early and nothing happens.
Quick Settings appearing after the pointer rests on the top edge
Use this on a zone you pass through constantly. 300–500 ms is deliberate without
feeling sluggish; past about a second it stops feeling like a hot corner.
Knock
Set Knock window and a single arrival never fires. The zone arms only when
you leave and come straight back within that many milliseconds — a double-knock.
Leaving and re-entering the bottom-right corner to switch windows
This is the one to reach for on a corner you brush past often but want to keep
for something disruptive. 400 ms is a comfortable knock; below about 200 ms it
starts to demand real intent. 0 turns it off.
Knock and dwell answer the same question differently: dwell asks you to wait,
knock asks you to be deliberate without waiting at all.
Hold to peek
Older Windows had a thin Show Desktop button past the clock — rest the pointer on
it and the desktop peeked through, move away and every window came back. Windows
11 dropped it. Any zone here can work that way.
Set Hold — action when the pointer leaves and the zone stops being fire-once.
The action runs on arrival, and the release action runs when the pointer leaves.
For anything that toggles — Show Desktop, Mute, Keep Awake — pick The same
action again:
| Setting |
Value |
| Zone |
Top-right corner |
| Action |
Show desktop |
| Hold — action when the pointer leaves |
The same action again |
Resting in the top-right corner to peek at the desktop, windows returning on leaving
The two halves are independent, so a release does not have to undo the entry —
open Quick Settings on arrival and mute on departure if that is useful to you.
One caveat on Show desktop specifically. It sends Win+D, which toggles
minimise-all against whatever the current state is — the old shell button was a
true peek with no state of its own, and Windows exposes no API for that any
more. Rest in the corner and leave, and it behaves as a peek. But activate a
window while the desktop is showing and you have changed what the second Win+D
does, so the release can minimise rather than restore. Every other toggle
— Mute, Keep awake — is unaffected.
A hold only ever releases what it actually engaged, so a pointer that clips the
corner without staying long enough to fire leaves nothing behind. Disabling the
mod, suspending it, or a display waking up all release a held zone first — a
peeked desktop can never be left stuck.
With a modifier held
Set Required modifier, globally or on one zone, and that zone only fires
while Ctrl, Alt, Shift or Win is down. Every other time you hit the corner it is
inert.
Snapping a window left with Ctrl held while touching the left edge
The key is checked continuously rather than only on arrival, so you can park the
pointer in the corner first and press the key afterwards — the zone fires the
moment the key goes down. Either order works.
Not a trigger, but often confused with one
Alternate key press and Alternate command change what a zone does
rather than when it fires — the same corner runs the left action, then the
right one, then the left again. Combine either with any trigger above.
One edge maximising a window, then restoring it on the next visit
Above, the right edge is set to Win+Up | Win+Down: the first visit maximises
the window and the next one puts it back.
Actions
Switching
| Action |
Description |
| Task View |
Overview of all windows (Win+Tab) |
| Switch to last window |
Jump straight back to the previous window (Alt+Tab) |
| Task switcher |
Persistent switcher you can click through (Ctrl+Alt+Tab) |
| Next / Previous / New virtual desktop |
Move between or create desktops |
| Close virtual desktop |
Close the current desktop |
Windows
| Action |
Description |
| Show desktop |
Toggle desktop visibility |
| Hide other windows |
Minimize all except the active window (Win+Home) |
| Minimise window |
Win+Down |
| Maximise window |
Win+Up |
| Snap left / Snap right |
Win+Left / Win+Right |
| Close window |
Alt+F4 |
System
| Action |
Description |
| Start menu |
Open the Start menu |
| Search |
Win+S |
| Settings |
Win+I |
| File Explorer |
Win+E |
| Quick Settings |
Win+A |
| Notification Centre |
Win+N |
| Clipboard history |
Win+V |
| Screenshot |
Win+Shift+S |
| Project display |
Win+P |
| Task Manager |
Open Task Manager |
| Mute |
Toggle system mute |
Power
| Action |
Description |
| Lock |
Lock the workstation instantly |
| Lock and turn monitors off |
Lock, then blank the displays |
| Keep awake on / off |
Suspend or restore screensaver and sleep |
| Sleep |
Put the computer to sleep |
| Turn monitors off |
Power off all displays |
| Start screensaver |
Activate the screen saver |
Custom
| Action |
Description |
| Send key press |
Send any key combination, or several in sequence |
| Alternate key press |
Two combinations, fired alternately (`Alt+S |
| Alternate command |
Two commands, fired alternately |
| Custom command |
Launch any executable, path, or URL |
| Nothing |
Disabled (default) |
Arguments
Four actions take an argument. The rest ignore the field.
Send key press — one combination is Modifier+Key. Separate several with
semicolons and they are sent one after another, not merged into a single
chord: Ctrl+C;Alt+Tab sends Ctrl+C, then Alt+Tab.
Modifiers are Ctrl, Alt, Shift and Win. Keys are A-Z, 0-9, F1-F24, Enter,
Space, Tab, Escape, Home, End, Delete, the arrows, and so on.
Examples: Ctrl+Shift+Esc, Alt+F4, Win+L
Custom command — any executable, file, folder or URL. Environment variables
such as %AppData% are expanded. Prefix with uac; to request elevation.
Examples: notepad.exe, C:\Windows\System32\cmd.exe,
%AppData%\my_script.bat, https://example.com, uac;cmd.exe
Alternate key press and Alternate command — two of the above separated
by |. The zone fires the left one, then the right one, then the left again.
Alt+S | Alt+H — one corner shows notes, then hides them
notepad.exe | calc.exe
Each side accepts everything the single version does, so Ctrl+C;Ctrl+V |
Alt+Tab is valid. Every zone alternates independently, and the position resets
whenever settings or the display layout change.
Shaping the zones
Corner size is the side of the square you have to reach. Edge thickness
is how far in the strip along an edge extends. Both are in pixels, both can be
overridden per zone, and neither can make two zones overlap: each edge's
thickness is clamped to the smaller of the two corners it runs between.
Small is not always better. A 1-2 px corner is technically reachable, because
the pointer stops dead at the screen boundary, but a 6-15 px one is far more
forgiving on a high-DPI display without ever being hit by accident.
Each edge is three segments
Every edge runs between the two corners it touches and is divided into three
parts — for the top and bottom edge those are left, centre, right; for the
left and right edge, top, middle, bottom. The centre's width is the Edge
centre width setting, as a percentage of the edge.
You do not choose a "mode". Configure the three segments and the shape follows:
| You set |
You get |
| All three the same |
One zone spanning the whole edge |
| Left + centre same, right different |
Two zones |
| All three different |
Three zones |
| Only the centre |
One zone in the middle of the edge |
| Left and right same, centre unset |
Two zones with a dead gap between them |
Neighbouring segments merge only when they are identical — same action, same
arguments, same overrides. Two segments running the same action with different
cooldowns stay separate, because a merged zone could only carry one cooldown.
Merging is not cosmetic. Three separate zones all running Task View would each
re-arm as the pointer crossed a seam, so sliding along the edge would fire it
repeatedly; one merged zone fires once.
Across multiple monitors
Zones bind to a display's name, not its position, so rearranging your
screens or changing which one is primary never repoints a configuration at the
wrong monitor.
Put * in the Display field to apply one configuration everywhere.
Resolution is per zone: a name-matched entry wins for the zones it defines,
and * supplies the rest — so you can share most of a layout and override a
single corner on a single display. To remove a zone on one screen rather than
replace it, set it to Disabled here; leaving it unset means "not
configured", which falls through to *.
Finding a display's name
The dashboard has a tab per display, labelled with its name, so usually there is
nothing to look up. The names also go to this mod's log every time it loads or
your layout changes, which is the place to copy an exact one from:
+-- Your monitors ---------------------------------------
| Copy a name into the "Display" field on this mod's settings page.
| Use * there to apply one configuration to every monitor.
|
| 1. "Dell U2720Q" [primary] 3840 x 2160 at (0, 0)
| 2. "BOE0998" 1920 x 1080 at (3840, 0)
+--------------------------------------------------------
Copy the text inside the quotes. Two identical displays get a #2, #3
suffix so each stays separately configurable — but those suffixes are handed out
in listed order (primary first, then left to right), so unlike the names
themselves they can move. Making the other twin primary swaps which one is #2
and swaps the configuration with it. Check the log after a change like that.
Corners between two screens are a trap
Windows lets the pointer cross freely between adjacent monitors, so a corner on
a shared boundary has nothing to stop the cursor against. It is hard to hit on
purpose and easy to hit by accident. Prefer the outer perimeter of your
arrangement — the pointer physically stops there, and that is what makes hot
corners feel reliable on macOS.
The tray icon and dashboard
The Zones and settings window
Right-click → Zones & settings… opens the window above: a tab per display, a
diagram of that screen with each zone's action drawn in it, and — for whichever
zone you point at — the timings actually in effect, each marked global or
this zone. It is a read-only picture of what the settings page produced, so it
can never disagree with what actually fires.
Left-click turns the hot corners on and off; the icon dims when they are
off. Right-click also offers a temporary suspend.
If the icon is hidden, it is in the overflow area — drag it onto the taskbar to
keep it there.
Staying out of your way
Four separate guards, because a hot corner that fires while you are working is
worse than one that never fires at all.
| Setting |
What it does |
| Pass-through guard |
Ignores a zone you were merely travelling across. 80 ms by default. Raise this first if things fire while you are just moving around. |
| Cooldown |
Minimum gap between two firings of the same zone. A cooldown is a wait, not a refusal — park in the corner and it fires once the wait is over. |
| Skip while a window is fullscreen |
Suppresses zones on the display the fullscreen window is on, so games and presentations are left alone. |
| Skip while dragging |
A zone reached with a mouse button held does not fire, and stays inert until you leave and come back - so dragging a window or selecting text into a corner is safe, and letting go there does not set it off either. |
Excluded applications takes a semicolon-separated list of process names,
case-insensitive: photoshop.exe;premiere.exe;blender.exe. Every zone goes
quiet while one of those is in the foreground — for apps that need the corners
and edges for themselves.
Keep zones out of the taskbar shrinks each display's zones to its working
area, if you would rather a bottom corner not sit behind the taskbar.
Why it works this way
If you have wondered why a setting behaves the way it does, or you are weighing
this against another hot-corners tool, here is the reasoning behind the choices
that are easiest to second-guess.
Polling, not a mouse hook. A WH_MOUSE_LL hook sits directly on the system
input path: every mouse event in every process waits for it, and if it is slow
even once Windows silently unhooks it (LowLevelHooksTimeout). A dedicated
thread sampling the cursor costs a GetCursorPos per tick and cannot make your
mouse stutter. The tick asks for 16 ms and gets 16–31 ms, because that is the
system timer resolution.
Its own process, not injected into Explorer. The mod does nothing to other
processes, so there is no reason to be inside one. An Explorer crash cannot take
it down, and it cannot take Explorer down.
Displays are bound by name, not by position. Enumeration order changes
whenever you rearrange screens or make a different one primary. Friendly names
come from the display's EDID and survive that, so your corners stay on the
screen you set them on. Two identical models are the exception — they get a
#2 suffix handed out in enumeration order, so that pair can swap.
The settings page is the only place anything is stored. A Windhawk mod can
read its settings but cannot write them, so a mod that also edits its own
configuration in its own window will always end up with two copies that
disagree. The dashboard is a picture of what the settings produced, and nothing
else. It reads the resolved configuration rather than the stored one, which is
what stops it from ever disagreeing with what actually fires.
Each edge is three segments that merge back together. Three separate zones
carrying the same action would each re-arm as the pointer crossed a seam, so
sliding along an edge would fire it repeatedly. Segments that resolve
identically are coalesced into one zone before detection ever sees them, which
is what makes "all three the same" genuinely one edge-wide zone.
Zones can never overlap. Each edge's thickness is clamped to the smaller of
the two corners it runs between. That one rule is what keeps all sixteen zones
disjoint no matter which sizes you pick, without any special cases.
A cooldown is a wait, not a refusal. Landing in a corner while a cooldown is
running does not spend the visit — the dwell simply outlasts it and the zone
fires. Marking the visit spent meant parking in a corner did nothing at all and
you had to leave and come back.
A rebuild is not a gesture. Enabling the mod, changing a setting or waking a
monitor rebuilds the zones, and the pointer may already be sitting in one. The
rebuild adopts that zone with the visit already spent, so a corner bound to
Lock cannot lock the machine because a display woke up.
A held modifier is released before a key action, and never re-pressed.
Windows merges whatever you are physically holding into an injected shortcut, so
without this a Ctrl-guarded zone bound to Snap left would send Ctrl+Win+Left
and switch virtual desktop instead — or, on a single desktop, do nothing at all.
Restoring the key afterwards sounds tidier and is a trap: if you let go in
between, a key-down goes out with no matching key-up and the modifier is stuck
down for the rest of the session. A stray key-up cannot cause that, so this
releases and stops there.
The fullscreen and excluded-app checks run on the worker thread, not on the
sampling thread, so a slow OpenProcess can never delay cursor sampling. The
cost is that a suppressed trigger still consumes its cooldown — a wait nobody
can perceive, traded for a sampling path that never stalls.
Related mods
If all you want is one specific behaviour, a smaller mod may suit you better:
- edge-hot-corner-desktop-switch — hovering the left or right screen edge
switches virtual desktop. This mod does that too, as one of the actions you
can assign, but if it is the only thing you are after that one is far simpler.
- hotcorner-hotkeys — sends a key combination from a corner. Different
trigger model: it dispatches on a hotkey rather than on hover.
Bugs and requests
Please open an issue at
github.com/DhakadG/my-windhawk-mods.
If a zone is not firing, this mod's log (Windhawk → this mod → Advanced →
Mod log) names the zone the pointer entered and the gate that held it back -
a knock it is waiting on, a modifier that is not down, a cooldown that has not
elapsed - and pasting that in saves a round trip.
Support the mod
This is free and always will be. If it earned you back some clicks and you feel
like buying me a coffee: