A small, just-for-fun Windows tool that randomizes your mouse pointer — its appearance, size, and speed — using the native Win32 cursor APIs. Run it for a laugh, prank a friend, or crank it up to wild mode, where the explicit goal is to make clicking anything genuinely hard.
Wild mode is running while I try to play the mouse-accuracy game at
mouseaccuracy.com (a third-party site,
not affiliated with this project) — hitting the target becomes hard.
⚠️ Changes are system-wide. Alwaysrestorewhen you're done (a sign-out or reboot also resets the system cursors). See Safety.
- Windows 10 or 11
- Windows PowerShell 5.1 (built in) or PowerShell 7+
- No admin rights, no dependencies — it's a single script
irm https://raw.githubusercontent.com/r000bin/cursed-cursor/main/install.ps1 | iexThis installs the latest stable release to %LOCALAPPDATA%\Programs\CursedCursor,
verifies the download against its published SHA256 checksum, and puts a
cursed-cursor command on your PATH (per-user, no admin). Then:
cursed-cursor wild # maximum chaos
cursed-cursor restore # put your pointer backPin or choose a version. By default the installer pins the latest stable tag.
To install a specific version (or the bleeding-edge main), invoke it as a
scriptblock and pass -Ref:
# a specific release
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/r000bin/cursed-cursor/main/install.ps1))) -Ref v1.0.0
# latest from main
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/r000bin/cursed-cursor/main/install.ps1))) -Ref mainPrefer to read before you run? Inspect it first, then execute:
$s = irm https://raw.githubusercontent.com/r000bin/cursed-cursor/main/install.ps1
$s # review it
$s | iex # run itYou can also verify the script by hand against
CursedCursor.ps1.sha256:
(Get-FileHash .\CursedCursor.ps1 -Algorithm SHA256).Hash # compare to the .sha256 fileUninstall any time:
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/r000bin/cursed-cursor/main/install.ps1))) -UninstallDon't want to install? Clone the repo and double-click one of the .cmd launchers:
| File | What it does |
|---|---|
Wild.cmd |
One-shot randomize (cursors + size + speed), then exits |
RunWild.cmd |
Continuous chaos every 5 s; Ctrl+C stops & restores |
WildMode.cmd |
Wild mode — extreme size/speed, aims to be unclickable |
Restore.cmd |
Puts your normal pointer back |
Or run it from a PowerShell window:
powershell -ExecutionPolicy Bypass -File .\CursedCursor.ps1 randomize
powershell -ExecutionPolicy Bypass -File .\CursedCursor.ps1 restore(Tip: run Set-ExecutionPolicy -Scope CurrentUser RemoteSigned once and you can
drop the -ExecutionPolicy Bypass.)
randomize Pick random cursors + size + speed, apply, and exit (persists).
restore Put your real cursors and speed back.
run Loop forever, re-randomizing on an interval; restores on Ctrl+C.
wild Like 'run', but cranked — bimodal size + bimodal speed on a random
interval, with the explicit aim of making it hard to click.
set Apply an explicit cursor file and/or speed/size (for testing).
# Gentle continuous fun, re-rolling every 8 seconds
.\CursedCursor.ps1 run -IntervalSeconds 8
# Maximum havoc
.\CursedCursor.ps1 wild
# Only change the look, leave speed and size alone
.\CursedCursor.ps1 randomize -SkipSpeed -SkipSize
# A specific giant cursor, no speed change
.\CursedCursor.ps1 set -Cursor C:\Windows\Cursors\dinosaur.ani -Size 200 -SkipSpeed- Bimodal size — each cursor is either a tiny speck (8–28 px) or a screen-hogging monster (320–512 px), nothing in between.
- Bimodal speed — the pointer lurches between super-sluggish (1–2) and super-flighty (19–20).
- Random interval — everything reshuffles on a random 0.5–3 s timer, so you can never settle into a rhythm.
SetSystemCursor replaces the system cursors globally and persistently, so:
- The
run/wildloops restore your pointer automatically onCtrl+C(use the keyboard to stop — in wild mode clicking is the whole problem!). - One-shot
randomizepersists until you runrestore(or sign out / reboot). - Your original pointer speed is saved to
%LOCALAPPDATA%\cursed-cursor-state.jsonsorestorecan recover it. Cursor appearance and size are restored by reloading the system scheme.
All via P/Invoke into user32.dll:
LoadImageloads each.cur/.anifromC:\Windows\Cursorsat a chosen pixel size (this is what gives true size control).SetSystemCursorassigns it to each system cursor slot (arrow, hand, busy, I-beam, resize handles, …).SystemParametersInfogets/sets pointer speed (SPI_*MOUSESPEED) and reloads the real cursors on restore (SPI_SETCURSORS).
The randomization ranges are constants at the top of CursedCursor.ps1:
$MinCursorSize / $MaxCursorSize # 'run' mode size range
$TinySize* / $HugeSize* # 'wild' bimodal size bands
$SluggishMin/Max, $FlightyMin/Max # 'wild' bimodal speed bands
$WildIntervalMinSec / $WildIntervalMaxSec # 'wild' random intervalMIT — see LICENSE.