A reading light for your screen. Dims everything except the line you're on — a digital version of the classic index-card-under-the-line reading technique.
Platform support: Windows 10+ (current). macOS support is planned.
No releases published yet. Build from source (see below) until v1.0 ships. Once a release is available: download IndexCard-1.0-Setup.exe from Releases and run it. No admin rights required.
Windows security prompt: IndexCard is not yet code-signed. Windows SmartScreen will block it on first run — click More info → Run anyway to proceed. A signed build is planned for the first public release.
Win+Shift+W— toggle the overlay on/off. First press opens a selection screen: drag to draw your reading strip.- Click the dimmed overlay area or the strip border to enter follow mode. The strip stays anchored to the exact point you clicked and rides along with your cursor as you read. Click again to drop it in place.
- Bottom-right pill:
□— redraw the strip (drag a new one)✕— hide the overlay
- Tray icon (right-click):
- Show/Hide, Redraw, Reset Defaults, Quit
Edit %APPDATA%\IndexCard\settings.json to adjust colors, margins, opacity, and border width. Changes take effect on next launch.
| Key | Default | Description |
|---|---|---|
selectionWidth |
900 | Strip width in pixels |
selectionHeight |
40 | Strip height in pixels |
marginTop |
150 | Space above the strip |
marginBottom |
160 | Space below (room for the pill toolbar) |
marginLeft |
75 | Space left of the strip |
marginRight |
75 | Space right of the strip |
opacity |
0.90 | How opaque the dim overlay is (0.15–1.0); higher = more dimmed |
borderWidth |
2 | Strip border thickness in pixels (1–8) |
Requirements: Windows 10+, Visual Studio 2022 (Desktop C++ workload), CMake 3.20+
cmake -S . -B build
cmake --build build --config Release
# output: build\Release\IndexCard.exeBuild the installer (requires Inno Setup 6):
# Adjust the path to match your Inno Setup 6 installation
& "$env:LOCALAPPDATA\Programs\Inno Setup 6\ISCC.exe" installer\indexcard.iss
# output: dist\IndexCard-1.0-Setup.exePure Win32 C++, no dependencies beyond the Windows API. Single-process, single-thread message loop.
| Module | Role |
|---|---|
main.cpp |
App window, message loop, DPI setup, coordination |
OverlayWindow |
WS_EX_LAYERED popup, DIB pixel rendering, UpdateLayeredWindow |
SelectionCapture |
Full virtual-screen snip window for drawing the strip |
Hotkeys |
Global Win+Shift+W via RegisterHotKey + LL keyboard hook fallback |
TrayIcon |
System tray icon and context menu |
Settings |
JSON persistence in %APPDATA%\IndexCard\ |
Theme.h |
Compile-time accent color (#5eead4) |
Click-through: WM_NCHITTEST returns HTTRANSPARENT over the strip so the content underneath stays fully interactive. The pill toolbar returns HTCLIENT.
Multi-monitor: selection capture uses SM_XVIRTUALSCREEN / SM_CXVIRTUALSCREEN so negative-coordinate monitors work correctly.
Logs: %APPDATA%\IndexCard\indexcard.log