Files
fuckcapslock/README.md

63 lines
3.3 KiB
Markdown

# 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.
## Usage
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. The app registers itself in `HKCU\Software\Microsoft\Windows\CurrentVersion\Run` for auto-start on next boot
## 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