I hacked out a solution that will work OK for me. I'm still interested in better answers.

Here is a autohotkey script that is simple enough that you can read it. It runs publicly so you can turn it off. No bells and whistles but maybe useful to some of you.

This solution meets some of the criteria

- Runs publically
- Easy to turn off via the task bar
- Fast
- Free

It does not meet other criteria

- not encrypted
- not tested for cross platform compatibility

It also adds requirements

- Need AutoHotKey
- Manual Installation

This will work for those of you familiar with AutoHotKey. You will need to set your own keylog_path. I will give full installation instructions if anyone needs them. Here is the script:

```
; Visible KeyLog (not evil)
; bmh Oct 2010 <benjamin.haley@gmail.com>
; free to all
; Configuration Variables
keylog_path = *C:\Users\Ben\Desktop\keylog.txt
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; Log All letters, numbers and some grammar symbols
; * avoids interrupting input
; ~ ignores case
*~a::log("a", keylog_path)
*~b::log("b", keylog_path)
*~c::log("c", keylog_path)
*~d::log("d", keylog_path)
*~e::log("e", keylog_path)
*~f::log("f", keylog_path)
*~g::log("g", keylog_path)
*~h::log("h", keylog_path)
*~i::log("i", keylog_path)
*~j::log("j", keylog_path)
*~k::log("k", keylog_path)
*~l::log("l", keylog_path)
*~m::log("m", keylog_path)
*~n::log("n", keylog_path)
*~o::log("o", keylog_path)
*~p::log("p", keylog_path)
*~q::log("q", keylog_path)
*~r::log("r", keylog_path)
*~s::log("s", keylog_path)
*~t::log("t", keylog_path)
*~u::log("u", keylog_path)
*~v::log("v", keylog_path)
*~w::log("w", keylog_path)
*~x::log("x", keylog_path)
*~y::log("y", keylog_path)
*~z::log("z", keylog_path)
*~0::log("0", keylog_path)
*~1::log("1", keylog_path)
*~2::log("2", keylog_path)
*~3::log("3", keylog_path)
*~4::log("4", keylog_path)
*~5::log("5", keylog_path)
*~6::log("6", keylog_path)
*~7::log("7", keylog_path)
*~8::log("8", keylog_path)
*~9::log("9", keylog_path)
*~Space::log(" ", keylog_path)
*~Enter::log("`n", keylog_path)
*~.::log(".", keylog_path)
*~,::log(",", keylog_path)
;the logging function
log( letter, path )
{
fileappend, %letter%, %path%
return
}
```