Initial commit — FuckCapsLock v1
This commit is contained in:
62
README.md
Normal file
62
README.md
Normal file
@@ -0,0 +1,62 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user