# 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