Privacy

KeyPressOSD watches your keyboard. That is the whole point of it, and it is also exactly why the limits below are worth stating precisely rather than in general terms.

What it never does

Excluded programs

The Privacy tab holds a list of programs whose input is never shown. One name per line, no .exe needed.

The Privacy tab with a multi-line box for excluded programs

The exclusion list. One process name per line — the name, not a path, so it applies wherever the program was started from.

This is for a password manager, or anything else where the keystrokes matter more than the demonstration. A program on this list produces no entries at all — so no panel, and no application icon either.

It is a blunt instrument, and deliberately so. A per-control check for password fields would be better and is not reliably possible from outside a process: UI Automation answers for some frameworks and not others, and a heuristic that is right most of the time is precisely the wrong shape here — it would put a password on screen on the occasion it guessed wrong. A named process is a promise that can be kept.

What Windows already protects

Some things need no entry on that list, because a low-level keyboard hook never sees them at all:

This one is the protection you can give up. An elevated KeyPressOSD is at the same level as those windows and does see them — which is the point of running it elevated, and the reason to leave it off unless you need it. It is worth knowing which of the protections on this page is the one that changes: the others do not. An elevated instance still writes no keystroke to disk, still injects nothing, and still cannot reach the UAC prompt or the lock screen, because those are on another desktop rather than behind an integrity check.

Pausing

Ctrl+Alt+P stops recording and clears the display immediately. Nothing is captured while paused.

For something you do occasionally, pause is faster than editing the list. For something you do regularly, the list is better — it cannot be forgotten.

The files it writes

Two, both beside the executable, and the System tab shows the folder.

KeyPressOSD.json holds settings only. It contains no captured input, and the excluded-programs list is the only thing in it that names anything outside this application.

KeyPressOSD-crash.log is written only when something goes wrong, and most copies never have one. It records the failure itself — the error, where in the program it happened, how long the copy had been running, whether it was elevated, and how many drawing handles it held. That is all deliberately about this application, not about you: there is no keystroke in it, no typed text, no window title and no process name. It exists because a copy once ended with no explanation at all, and reconstructing why took a crash dump and two event logs.

It is a plain text file, you can read it, and deleting it is safe. It is capped in size, and once it reaches the cap the oldest half is dropped rather than the whole file, so a first occurrence is not thrown away in favour of a hundredth. See Troubleshooting for what an entry looks like.

Nothing else is written anywhere, with the single exception under Startup below.

Startup

Run at Startup writes one value to the per-user Run key in the registry. That is the only thing this application writes outside its own folder, it is optional, and unticking it removes the value.