# windows-troll
A modular Rust library (and CLI) of harmless Windows "troll" pranks. Each
prank is a self-contained module behind its own Cargo feature flag, so you can
build exactly the ones you want.
Windows only.
## Modules
| `window-hider` | `modules::window_hider` | Minimize (hide) and restore windows |
| `mouse-teleporter`| `modules::mouse_teleporter`| Move the mouse to chosen or random positions |
| `window-wobbler` | `modules::window_wobbler` | Smoothly sway a window in place (direction + amplitude) |
| `window-party` | `modules::window_party` | Scramble your screen into an animated grid party |
## Building
```sh
# everything (all default features)
cargo build --release
# just one module
cargo build --no-default-features --features window-hider
```
## CLI usage
```sh
# Root help
cargo run -- --help
# Window hider
cargo run -- window-hider list
cargo run -- window-hider hide # minimize a random window
cargo run -- window-hider hide --title "Untitled"
cargo run -- window-hider restore <HWND>
cargo run -- window-hider loop --min 10 --max 60 # daemon
# Mouse teleporter
cargo run -- mouse-teleporter resolution
cargo run -- mouse-teleporter teleport <X> <Y>
cargo run -- mouse-teleporter random
cargo run -- mouse-teleporter loop
# Window wobbler
cargo run -- window-wobbler foreground --direction both --min 2 --max 10
cargo run -- window-wobbler random --duration 3 --min 4 --max 12
cargo run -- window-wobbler title "Notepad"
# Window party (screen scramble)
cargo run -- window-party --grid 20 --duration 120
cargo run -- window-party --animation galaxy --cycle 15 --seed 42
```
Run any subcommand with `--help` for its full options. `window-party` supports
`LEFT`/`RIGHT` to switch animations, `Space` to pause, and `Esc` to end early
(disable with `--no-interactive`).
## Using as a library
```rust
use windows_troll::modules::window_wobbler::{wobble_foreground_window, WobbleSettings};
wobble_foreground_window(WobbleSettings::default());
```
## Architecture
```
src/
├── lib.rs # crate root; exports `desktop` and `modules`
├── desktop.rs # shared window enumeration (WindowInfo, list_windows)
├── main.rs # CLI entry: builds the root Command from the registry
├── cli/
│ ├── mod.rs # CliModule trait + all() registry
│ └── modules/ # per-module CLI implementations (one per module)
└── modules/ # the library modules themselves (clap-free)
└── window_hider/
├── mod.rs
├── mouse_teleporter/...
├── window_wobbler/...
└── window_party/
├── mod.rs
├── capture.rs # screen capture (BitBlt)
├── grid.rs # grid tile easing
└── animations.rs # 18 animation styles
```