Files
fuckcapslock/README.md

3.7 KiB

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_LLSetWindowsHookEx). 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:

# 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

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.

Copyright (c) 2026 Llama Chile Shop