# FuckCapsLock

**Caps Lock is a vestigial organ — this app permanently disables it until you terminate the app.**

A lightweight Windows background utility that hooks the keyboard at the system level and swallows the Caps Lock keypress before it reaches any window. Runs silently in the system tray, auto-starts with Windows, and only stops blocking Caps Lock when you explicitly exit via the tray menu.

## How It Works

FuckCapsLock installs a low-level Windows keyboard hook (`WH_KEYBOARD_LL` — `SetWindowsHookEx`). Every keypress passes through this hook before any application sees it. The hook inspects the virtual-key code and, if it matches `VK_CAPITAL` (0x14), **returns 1** (blocked) without calling `CallNextHookEx`. All other keys pass through normally.

No driver, no service, no admin rights required. It's a single-user-mode userland hook that runs in your session's context.

## Quick Install

Run the included `install.ps1` as Administrator from the repo root:

```powershell
# Right-click install.ps1 -> Run with PowerShell (Run as Administrator)
```

This copies `fuckcapslock.exe` to `C:\Program Files\FuckCapsLock\`, sets up auto-start in the registry (HKLM — all users), and launches the app immediately.

## Usage (Manual)

1. Run `fuckcapslock.exe` — it minimizes to the system tray immediately
2. Caps Lock is now permanently disabled — pressing it does nothing
3. To restore Caps Lock, right-click the tray icon and select **Exit**
4. Without the installer, the app registers itself in `HKCU\Software\Microsoft\Windows\CurrentVersion\Run` on first launch for per-user auto-start

## Build

```bash
dotnet publish -c Release -r win-x64 --self-contained
```

Output: `bin/Release/net10.0/win-x64/publish/fuckcapslock.exe`

A pre-built self-contained exe is also available in the `out/` directory.

## Requirements

- Windows x64 (x86-64 processor)
- No .NET runtime required for the self-contained build

Tested on Windows 11. Should work on Windows 10 and 8 as well.

## System Calls Reference

Every Win32 API and registry call the application makes, for auditability:

| API / Call | Module | Purpose | Risk |
|---|---|---|---|
| `SetWindowsHookEx(WH_KEYBOARD_LL, ...)` | user32.dll | Install low-level keyboard hook | **Blocks only VK_CAPITAL** |
| `UnhookWindowsHookEx(...)` | user32.dll | Remove hook on exit | Cleanup — no data sent |
| `CallNextHookEx(...)` | user32.dll | Pass unchecked keys to next hook | Normal keyboard passthrough |
| `GetModuleHandle(...)` | kernel32.dll | Get module handle for hook install | Standard hook setup |
| `Registry.CurrentUser\...\Run` | Microsoft.Win32 | Register for auto-start on boot | **Writes only its own exe path** |
| `NotifyIcon` | System.Windows.Forms | System tray icon | Visual indicator only — no data |
| `Application.Run(...)` | System.Windows.Forms | Message loop | Keeps process alive |
| `Mutex("Global\FuckCapsLock")` | System.Threading | Prevent duplicate instances | Singleton pattern |

**No network calls, no filesystem reads/writes (beyond registry auto-start), no process injection, no DLL sideloading, no keylogging.** The only key intercepted is Caps Lock (0x14), which is swallowed and never forwarded.

## Background

Caps Lock was designed for typewriters where holding Shift was physically strenuous. On modern keyboards it serves no purpose — it toggles a mode that accidentally inverts case for entire sentences. Every major OS has considered removing it (Apple briefly experimented, Chromebooks replaced it with Search, IBM's Model M had a removable keycap). This utility exists so you don't have to rip the keycap off your laptop.

## License

MIT License — see [LICENSE](LICENSE).

Copyright (c) 2026 Llama Chile Shop
