⌨️ 一个有趣的 Windows 小工具:记录键盘上 104 个键中每一个键的使用情况——按下次数、按下顺序,并以 2.5D 立体键盘热力图直观呈现你的打字习惯。
- 纯本地 + 加密存储:数据只保存在本机,并使用 Windows DPAPI 按你的账户加密,不上传任何服务器,文件被拷走也无法解密
- 单文件绿色版:
KeyHeat.exe使用系统自带的 .NET Framework 编译,无需安装任何依赖,Windows 10/11 x64 直接双击运行 - 全局记录:无论你在哪个程序里打字、打游戏、写代码,都会被统计(只记录"哪个键被按了几次",不看屏幕内容,也不碰剪贴板)
| 功能 | 说明 |
|---|---|
| 3D 键盘 | 2.5D 立体键盘(浅色桌面 + 软阴影 + 圆角键帽),按频率着成键帽色(白→蓝→黄→橙→红),键帽上印键名和次数;按键时键帽实时下沉回弹;左上角大数字显示总按键 |
| 热力图 | 俯视平面热力图,按使用频率着色(蓝→绿→黄→红),实时闪白光;鼠标悬停查看某键精确次数和占比 |
| 按键顺序 | 按时间先后记录每一次按键(精确到秒),最新在最上面,本地保留最近 2000 条 |
| 统计排行 | Top 20 最常用按键条形图,显示次数与占比 |
| 实时统计 | 总按键数、今日按键数、最近 1 分钟按键速度 |
| 长按只计一次 | 按住某键触发系统自动重复时只记录 1 次(看视频长按快进不会刷爆统计),快速连续敲击仍按真实次数记录 |
| 开机自启动 | 勾选后写入注册表 HKCU\...\Run,开机静默启动到系统托盘,不弹窗打扰 |
| 导出 CSV | 一键把所有按键统计导出为 CSV(键名、次数、占比) |
| 清空数据 | 一键清零重新开始记录 |
- 双击
KeyHeat.exe(如果提示 SmartScreen,点"仍要运行"即可——程序是本机编译的,没有签名)。 - 主界面默认显示 3D 键盘;点右上角 隐藏到托盘 或最小化,它会缩到系统托盘继续记录。
- 双击托盘图标随时打开主界面;托盘右键菜单可以切换"开机自启动"或退出。
- 打字几分钟、几小时、几天后回来看热力图——你会发现自己最离不开的键(剧透:大概率是 Space 和 Backspace 😄)。
| 内容 | 位置 |
|---|---|
| 统计数据(加密) | C:\Users\<你>\AppData\Roaming\KeyHeat\keydata.bin |
| 错误日志 | C:\Users\<你>\AppData\Roaming\KeyHeat\error.log(仅程序异常时产生) |
| 开机自启动 | 注册表 HKCU\Software\Microsoft\Windows\CurrentVersion\Run 下的 KeyHeat 项 |
数据加密说明:数据文件使用 Windows DPAPI(ProtectedData,CurrentUser 范围 + 附加熵)整体加密后落盘,密钥由你的 Windows 登录账户派生、由操作系统保管。文件被拷贝到其他电脑或其他账户下无法解密,可防止备份、网盘同步、他人拷贝导致的按键记录泄露;日常使用无需输入任何密码。请注意残余风险:加密保护的是磁盘文件,运行期内存中的数据无法加密保护。
无需安装 Visual Studio 或任何 SDK——仓库里的 build.bat 使用 Windows 自带的 .NET Framework 编译器(csc.exe):
git clone https://github.com/YuMaoQiu-DongXv/KeyHeat.git
cd KeyHeat
build.bat生成的 KeyHeat.exe 即为单文件绿色版。
- 长按只计一次:按住某个键触发系统自动重复时只记录 1 次,松开后再次按下才重新计数(看视频长按快进/快退不会再刷爆统计);快速连续敲击仍按真实次数记录。
- 主键盘 Enter 与小键盘 Enter、左/右 Shift、Ctrl、Alt、Win 都会分别统计。
- 如果你移动了
KeyHeat.exe的位置,请重新勾选一次"开机自启动",让注册表指向新路径。 - 个别带驱动的高级键盘的多媒体键(音量、背光等)不属于标准 104 键,暂不统计。
- Win32 低级键盘钩子
SetWindowsHookEx(WH_KEYBOARD_LL)全局捕获按键(按下 + 松开),回调委托必须保存在字段里防止被 GC 回收——这是最容易踩的崩溃坑,程序里已处理并带异常日志。 - 3D 视图为 GDI+ 自绘 2.5D:正交轴测投影(仿射矩阵变换),每个键帽 = 顶面 + 可见侧面多边形,圆角用屏幕空间贝塞尔曲线切出;键帽文字用
GraphicsPath.AddString以浮点字号贴在倾斜面上;按下动画为 30fps 的深度衰减。 - 界面其余部分为 WinForms 自绘:多段渐变色热力映射(√count/max 归一化,避免 Space 一家独大导致其他键全是冷色)。
- JSON 持久化用系统自带的
JavaScriptSerializer,每 30 秒和退出时原子写入(先写临时文件再替换);落盘前整体经 DPAPI 加密。
见 LICENSE。
