统计你每天敲了多少次键盘、点了多少次鼠标、滚了多少格滚轮、鼠标走了多远。 所有数据只存在这台电脑上,不联网、不上传、不记录你输入了什么。
不是玩具式的计数器。键盘和鼠标分开建表、分开统计、分开重置, 因为这两类设备值得看的指标本来就不一样。
总次数、今日、按日趋势、每个按键的排名。精确到「空格键按了 376 次」这种粒度。
左键、右键、中键、侧键、拇指键分开记。罗技侧键会自动还原成鼠标事件,不会混进键盘统计。
中键滚轮和侧滚轮(拇指轮、左右倾)分开统计。大数字是两者之和,下面一行分列。
取 Raw Input 原始计数,不受系统「指针速度」「提高指针精确度」缩放影响,再按真实 DPI 换算成米。
当前速度(次/分),带 90 分钟逐分钟柱状;另有历史峰值和「有效均值」——空分钟不计入,不会被挂机拉低。
平均按住时长、平均按键间隔。同一个键 35 毫秒内「松开又按下」累计 2 次以上,会点名提示疑似双击故障。
用 Windows 系统自带的输入监听接口,只做计数,不拦截、不修改、不记录内容。 没有驱动、没有服务、没有后台网络请求。
WH_KEYBOARD_LL / WH_MOUSE_LL 全局监听,按键事件到达系统后拷贝一份计数,原样放行。
鼠标位移走 Raw Input 通道,拿的是鼠标自己上报的原始计数,不经过系统加速曲线。
HID 描述符 → USB 父设备名 → 罗技 HID++ → 注册表兜底,逐级降级,只读不写。
按小时聚合后写入单文件数据库。每轮写完即释放句柄,运行时也能复制备份。
| 优先级 | 来源 | 典型结果 |
|---|---|---|
| 1 · 最准 | HID 描述符(设备固件里的产品名) | Akko Keyboard |
| 2 | USB 父设备名(设备被独占时用) | USB Composite Device |
| 3 | 罗技 HID++ 协议,直接问接收器 | MX Master 3(经接收器) |
| 4 · 兜底 | 注册表设备名 | 符合 HID 标准的鼠标 |
前两档拿不到才降级。所以罗技无线鼠标会显示成真名,而不是「USB Receiver」。
问到的型号会缓存在数据目录的 logi_names.json 里,
接收器休眠或刚开机时直接读缓存,名字不会一会儿变一个。
只需要一个文件:疯键狂鼠-setup.exe(28 MB)。运行库、Qt 全打在里面,目标电脑不用装 Python。
| 项目 | 要求 |
|---|---|
| 操作系统 | Windows 10 / Windows 11,64 位(32 位装不上) |
| 管理员权限 | 不需要 |
| Python / 运行库 | 不需要 |
| 安装位置 | %LOCALAPPDATA%\Programs\疯键狂鼠 |
| 磁盘占用 | 约 100 MB |
| 联网 | 完全不联网 |
双击 疯键狂鼠-setup.exe,一路下一步。
「创建桌面快捷方式」和「开机自动启动」。后者建议勾上,装完就一直在后台统计。
从桌面或开始菜单启动,第一次运行会自动开始采集,不需要任何配置。
开始菜单 →「疯键狂鼠」→「卸载疯键狂鼠」,或系统设置里卸载。
会自动停掉后台采集、清掉开机自启项。
卸载不删除统计数据,重装后接着算。要彻底清干净,手动删掉 %LOCALAPPDATA%\keymouse-stat 文件夹。
程序由两部分组成:托盘图标常驻右下角,控制面板按需打开。关窗口不等于退出。
| 菜单项 | 作用 |
|---|---|
| 今日摘要 | 菜单顶部直接显示今天多少次键、多少次点击,不用打开窗口 |
| 打开仪表盘 | 唤出控制面板 |
| 显示报告 ▸ | 五个区间(今日 / 本周 / 本月 / 本年 / 全部)。生成临时报告在浏览器打开,关掉浏览器后文件自动删除 |
| 保存报告 ▸ | 同样五个区间,让你选位置存成 HTML,一直保留 |
| 后台采集状态 | 显示当前是「采集中」还是已停止;未运行时下面会出现「启动后台采集」 |
| 退出程序(后台继续统计) | 关掉界面和托盘图标,采集进程继续跑,数字不断档 |
| 全部退出(停止统计) | 连采集一起停,彻底不占资源、不再计数 |
顶部五个区间按钮,下面是 KPI 卡片、打字速度卡片、当前设备卡片、键盘/鼠标按键排名,以及「按小时」的活动图。
重启后台采集、开机自启开关、打开数据目录、设备备注名、鼠标 DPI、报告存放位置、键盘/鼠标分段重置、彻底清空、键鼠更换记录、使用说明、关于。
| 选择 | 界面 | 托盘图标 | 后台采集 |
|---|---|---|---|
| 收进托盘 | 收起 | 保留 | 继续 |
| 退出程序 | 关闭 | 关闭 | 继续 |
| 全部退出 | 关闭 | 关闭 | 停止 |
「退出程序」之后后台仍在统计,这是故意的。否则一天里关几次窗口,数据就断成几段。 想让软件彻底不占资源,用「全部退出」。
报告是单文件 HTML,双击就能在任何浏览器打开,不需要联网,可以直接发给别人。
| 栏目 | 内容 |
|---|---|
| 全部数据汇总 | 只有一行全量合计,不区分键盘鼠标,也不列型号 |
| 键盘按型号统计 | 每把键盘一项,只列键盘指标:活跃天数、键盘按键数 |
| 鼠标按型号统计 | 每只鼠标一项:活跃天数、点击、滚轮格数、行程 |
| 旧数据(1.3.2 之前) | 那版没记录型号,混在一起没法拆,单独列一栏 |
每款型号从第一次用算到被换掉为止。同型号换回来(比如带到公司再带回家)会接着累计。 换了新型号自动多出一项,旧的那项原样留着。
两张表 ——「按键明细」和「鼠标按键明细」。一行一个键,九列:
| 列 | 含义 |
|---|---|
| 按键 / 次数 / 占比 | 这个键按了多少次,占全部按键的百分比 |
| 日均 | 按活跃天数平均,不是按自然日 |
| 平均间隔 | 同一个键相邻两次按下隔了多久 —— 打字快慢看这个 |
| 按住时长 | 按下到抬起的平均毫秒数,反映轴体手感 |
| 首次 / 最近 | 这个键第一次和最近一次被按下的日期 |
| 分布设备 | 这个键在每台键盘 / 鼠标上各按了多少次 |
默认只列前 30 个键,表格下方有「展开全部」;点表头可按那一列排序,再点一次反向。 更快的看法是点热力图上的键 —— 旁边直接弹出这个键的详情小卡片,不用往下翻。 明细表和浮层用同一份数据,不会出现两处数字对不上。
设置 →「重置键盘统计」或「重置鼠标统计」。只动自己那一类,另一类完全不受影响。 数据不会删,型号下面会缩进多出一行「第 N 段(原因)」,型号总数仍然包含每一段。 适合换轴体、换微动之后单独看一段。
设置 →「彻底清空全部数据」。所有统计连同分段记录一起删掉,回到初始状态。 清空前会要你确认,删了找不回来。
分段可以只挑一个型号,也可以选「全部键盘 / 全部鼠标」一起开新一段。 键盘和鼠标的入口分开,是为了让你换微动的时候不会把键盘的数据也切一刀。
# 备份:整个 data 文件夹复制走即可 %LOCALAPPDATA%\keymouse-stat\data\ # 只搬历史数据:这三个文件一起拷(少一个可能丢最近几分钟的数据) stats.db stats.db-wal stats.db-shm
采集进程每轮写完就把文件句柄还回去,所以程序正在运行也能直接复制、移动、删除这个库,
不会卡在「文件正在使用」。想清空就删掉 stats.db,下次写入会自动重建一个空库。
换到新电脑:先装新版并启动一次(让它建好目录),再退出,然后把旧机器的
keymouse-stat 文件夹整个覆盖过去,重新打开即可接上历史数据。
需要看终端输出、写脚本或排查问题时用 疯键狂鼠cli.exe。日常使用完全不需要它。
| 命令 | 作用 |
|---|---|
doctor | 环境自检。换机器后先跑这个,看钩子、设备、数据库是否正常 |
watch | 终端实时统计,Ctrl+C 结束 |
today | 查看最近统计,不进图形界面 |
devices | 列出识别到的键鼠型号 |
report --period month | 生成并保存月度 HTML 报告(today/week/month/year/all) |
report --preview | 只预览,不落盘 |
reset --list | 列出有数据的型号和段号 |
reset --keyboard --reason 换了轴体 | 键盘分段重置 |
reset --mouse --device "MX Master 3" | 只重置某一只鼠标 |
probe --secs 30 | 按键诊断:逐条打印钩子收到的原始事件,用来查侧键 / 顶部按钮为什么没统计 |
export | 导出 CSV |
about | 版本、运行环境、数据位置 |
install-service / uninstall-service | 注册 / 移除开机自启 |
# 常用:先自检,再看实时,最后出一份月报 疯键狂鼠cli.exe doctor 疯键狂鼠cli.exe watch 疯键狂鼠cli.exe report --period month
| 路径 | 内容 |
|---|---|
%LOCALAPPDATA%\keymouse-stat\data\stats.db | SQLite 数据库,全部统计都在这里 |
%LOCALAPPDATA%\keymouse-stat\统计报告\ | 「保存报告」存下的 HTML |
%TEMP%\疯键狂鼠-预览\ | 「显示报告」的临时文件,关掉浏览器自动清除 |
按键次数、按住时长、按键间隔,都只保存「每小时每键的合计 / 均值 / 分布桶」, 不保存每一下按键的具体时间点。 因为「时间戳 + 键名」这种逐键序列在统计上足以还原出你打了什么字(击键动力学侧信道), 这种数据不该留在磁盘上。程序从设计上就不产生它。
全部程序代码不包含任何网络请求。想验证的话,断网运行一整天,功能和数据完全不受影响。
正常。低级钩子是 Windows 官方的输入监听接口,输入法、剪贴板工具、截图工具都在用。部分杀软按 API 调用做启发式判断,一律标红。
本程序的行为可以核对:只做计数、不写按键内容、不联网、不发任何网络请求。不放心可以断网跑一天,功能和数据完全不受影响。
Windows 安全机制。锁屏界面和提权桌面属于独立会话,低级钩子拿不到那里的输入事件。这部分不计数,属正常现象,不是 bug。
先点设置 →「重启后台采集」。它会把采集进程正常收尾落盘再重新拉起。
还不行就跑 疯键狂鼠cli.exe doctor,看钩子和设备两节是否正常。型号读不到多半是无线接收器休眠或设备被独占,插拔一次接收器通常就好。
从开始菜单或桌面再启动一次即可。如果后台采集也没在跑,控制面板里的「启动采集」按钮会把它拉起来。
注意点了「全部退出」之后图标会消失、统计也停,这是预期行为。
说明前三个来源都没拿到型号,退化到注册表兜底了。常见于廉价无线鼠标和白牌 USB 接收器。
这不影响统计,只是名字不好看。用设置 →「设备备注名」给它起个名,界面和报告会优先显示你起的名字。
那个按钮默认什么事件都不发,连 Windows 都收不到,任何软件都采不到。
去 Logi Options+ 里给它指定一个动作,推荐「鼠标中键」「前进/后退」,或键盘的 F13~F24(真实键盘基本不用,本程序专门把 F13+ 认成拇指键)。
想确认某个按钮到底发了什么,跑 疯键狂鼠cli.exe probe --secs 30,然后按下那个按钮,终端会逐条打印收到的事件。
因为要把「驱动合成的按键」和「你真按的键」分开 —— 罗技侧键就是靠这个还原成鼠标事件的。
副作用是 AutoHotkey 之类工具模拟出来的按键也不计入键盘次数。正常用物理键盘完全不受影响。
同一个键在 35 毫秒内「松开又按下」,人手做不到这么快,基本是触点抖动 —— 机械键盘轴体老化、鼠标微动磨损都是这个表现。
累计到 2 次以上就会红字点名。偶尔一次不会提示(避免误伤手快连按),真的坏了会反复出现。保修期内可以直接拿这条去送修。
这是设计如此。每台设备各记各的,换键盘不会清空任何数据,旧型号那一项原样保留,型号换回来还能接着累计。
想在新设备上从零看,用「重置键盘统计」开一个新分段,总数仍然连续可查。
取决于 DPI 准不准。行程 = 原始计数 ÷ DPI。
DPI 优先从驱动读(目前只有支持 HID++ 的罗技能读)。读不到就在设置 →「鼠标 DPI」手填,填一次长期有效。两样都没有时按 1000 DPI 估算,卡片和报告里会标「默认估算」—— 那种数字只能看个大概。
一个无线接收器在系统里会被拆成多个 HID 集合(鼠标、音量键、厂商自定义各一条)。程序按「同一只设备」合并成一条显示,后面标注「合并 N 个 HID 集合」。
主板 RGB 灯控、键盘音量旋钮这类不声明自己是鼠标/键盘的接口,不会单独显示。统计一直按整机汇总,列表长短不影响数字。