A Windows desktop tool that globally captures keyboard & mouse signals, displays them in a floating window, and records the time interval from the previous signal with 0.001 s precision.
一款 Windows 桌面小工具:全局捕获电脑每一次键鼠信号,悬浮窗实时逐条显示,并记录与前一信号的时间差(精度 0.001 秒)——「操作时间列表」。
📦 直接使用:前往 Releases 下载
KeyMouseCaptureQt-win64.zip,解压双击KeyMouseCaptureQt.exe(含全部 Qt DLL,无需安装环境)。
- 先配置、后启动:启动后进入可滑动设置页,配置完成后点击「▶ 启动捕获」;运行中按钮变为「■ 停止捕获」,随时停止 / 重启
- 全局捕获:按键按下 / 抬起 / 长按重复,鼠标按下 / 抬起 / 滚轮 / 移动(Win32 低级钩子)
- 逐条时间差:每条记录显示
时刻(HH:MM:SS.mmm) +0.004s 事件,基于 QueryPerformanceCounter,0.001s 精度 - 悬浮窗:置顶、半透明、可拖动、鼠标穿透、慢信号橙色高亮、高度随「条数 × 行高」自适应、宽度适配最长行
- 显示条数上限 20,超限自动删除最旧;透明度滑块 30%–100%(100% 时非分层窗口,兼容 RDP / 虚拟机)
- 记录开关:按键抬起 / 长按重复 / 鼠标移动 / 鼠标抬起 均可独立开关
- 显示内容可勾选:按键按下 / 抬起 / 长按重复 / 鼠标按键 / 滚轮 / 鼠标移动(含坐标)逐项选择是否显示在悬浮窗——只想看某几类信号时,其余类别不再刷屏;未勾选的记录项仍会写入日志。表头「共 N 信号」统计的是全部捕获,即使一个类别都没勾选也能看出捕获在正常进行(此时悬浮窗会明确提示「未勾选任何类别」,不再是空白一片)
- 连贯按键(衔接时间限制):设定一系列键鼠动作的衔接上限(0.3 / 0.5 / 1 / 2 / 3 秒),任一动作与上一个动作的间隔超过上限即视为衔接断裂——该行在悬浮窗中红色显示,日志追加
[衔接超时],可勾选「发出警告声」。鼠标移动不作为衔接基准(只刷新时间、不参与判定),否则指针一直抖动会把基准刷新掉,按键迟到几秒也判不出断裂 - 录制自己的连贯按键序列:点设置页「● 录制连贯按键」,依次做完你的动作(快捷键、鼠标点击…;抬起与鼠标移动不采集),再点一次结束。之后每次操作都会按这条序列逐步核对:某一步超出它的上限即红色标注 + 写入日志
[序列超时]+ 可选提示音;整条序列在时限内走完会有完成提示 - 录完可逐步改时间:序列录完后在设置页一行一步列出(序号 / 动作 / 衔接上限 / 删除),每步的上限都能单独调整(0 秒 = 该步不限时),也能「+ 添加一步」手工补一步、或按 ✕ 删掉一步。每步的实测间隔会一并保存,所以改「放宽倍数」(1.5×–3×)是按录制时的实测间隔重算全部上限,不必重录;手工改过或手工添加的步不会被倍数重算覆盖。首步与末步固定不限时(首步没有上一步、末步之后没有下一步要等)
- 可关闭悬浮窗:右键悬浮窗「关闭悬浮窗(继续捕获)」或点右上角 ✕,窗口关闭但捕获与日志继续,可随时从托盘菜单「显示悬浮窗」唤回(状态持久化)
- 日志:开启后把每一次捕获写入日志文件(默认 exe 同目录
KeyMouseCapture.log,可自选路径);追加写入、带 UTF-8 BOM 便于记事本查看,日志内容不受「显示内容」勾选影响 - 忽略按键名单:预设 Shift / Ctrl / Alt / Win / CapsLock + 自定义键名 + 「+ 录制」按钮(按下任意键即加入名单)
- 设置变更自动重启悬浮窗,已记录事件自动重放保留
- 系统托盘驻留、开机自启动、管理员模式(UAC 提权重启,可捕获提权窗口输入)
- 配置持久化到 exe 同目录
KeyMouseCapture.ini(标准[General]格式) - GUI 子系统构建,双击启动无终端黑窗;windeployqt 部署后可独立分发
src/
main.cpp 入口:QApplication + 管理员模式提权 + 装配
AppConfig.h/.cpp 配置:手动 INI 读写 / 键名⇄VK 映射 / 显示内容掩码 / 连贯序列 / 日志路径
EventItem.h 事件数据结构(显示文本 + 时间差 + 类别 + 衔接超时标记 + 序列步骤)
InputCapture.h/.cpp 捕获核心:全局钩子 + 高精度计时 + 连贯序列录制与逐步核对 + 日志写入 + 提权检测
FloatWindow.h/.cpp 悬浮窗:相对布局 / 高度自适应 / 穿透 / 拖动 / 事件重放 / 超时红色高亮
SettingsWindow.h/.cpp 设置页:滚动区 / 表单布局 / 预览 / 启动停止 / 序列录制 / 托盘
PreviewWidget.h/.cpp 悬浮窗迷你预览
tests/
test_config.cpp 自检:配置存取往返 / 显示内容过滤 / 衔接超时判定
test_sequence.cpp 自检:连贯序列的 录制 → 正常走完 → 超时告警(需要桌面会话,真实低级钩子)
build_test.bat 一键构建并运行两项自检
CMakeLists.txt 构建(显式 AUTOMOC / WIN32_EXECUTABLE)
build_qt.bat 一键构建脚本(CMake + Ninja + windeployqt)
legacy-win32/ Win32 API 版本(单 exe 零依赖,功能对齐)
数据流:InputCapture::eventCaptured(EventItem) 信号 → FloatWindow::addEvent()(显示内容过滤与总计数都在这里;日志在捕获侧一并写入);连贯序列在同一处 recordEvent() 内逐步核对,命中即红色标注。配置经全局 g_cfg 共享,设置变化 → restartFloat() 重建悬浮窗并重放事件。
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=C:\Qt\6.11.1\mingw_64
cmake --build build
windeployqt build\KeyMouseCaptureQt.exe
.github/workflows/build.yml:push / PR 自动构建并上传制品;推送 v* 标签自动创建 Release(Qt 6.8 MSVC 2022 + Ninja + windeployqt)。
git tag v4.2.1 && git push origin v4.2.1 # 自动构建并发布 Release
- 双击
build\KeyMouseCaptureQt.exe; - 设置页配置:记录项开关、显示内容(悬浮窗要显示哪几类信号)、显示条数(≤20)、透明度、字体、窗口尺寸、连贯按键衔接上限、录制连贯按键序列、日志、忽略按键等;
- 点击「▶ 启动捕获」→ 悬浮窗出现在右上角开始记录;运行中点击「■ 停止捕获」停止;
- 想校验一串固定操作是否够快:点「● 录制连贯按键」→ 依次做完动作 → 再点一次结束,之后每次操作都会按这条序列逐步核对;
- 关闭设置页 → 程序驻留系统托盘;右键悬浮窗可打开设置 / 关闭悬浮窗(继续捕获) / 暂停 / 清空 / 退出;悬浮窗关闭后从托盘菜单「显示悬浮窗」唤回。
tests\build_test.bat
覆盖:配置项存取往返(INI 键名 ⇄ 内存)、悬浮窗显示内容过滤(g_cfg.shows() 位映射)、连贯按键超时判定、连贯序列的录制与逐步核对(真实安装低级钩子,注入合成按键,需在桌面会话中运行)。全部通过打印 [OK] self-checks passed,失败返回 1。
- 先看悬浮窗表头:显示「运行中 | 共 N 信号」且 N 在涨 → 捕获正常,问题在显示过滤;显示「未勾选任何类别」→ 去设置页勾上要看的类别;
- 设置页状态栏若提示「前台窗口权限更高」→ 目标窗口是提权进程,勾选「以管理员身份运行」后重启本程序;
- 确认点过「▶ 启动捕获」(未启动时钩子未安装,任何输入都不会被记录);
- 打开日志再操作一次:日志记录全部捕获、不受显示过滤影响,用它区分「没捕获到」和「没显示出来」;
- 鼠标移动默认不记录,且显示/日志都受各自开关控制,别拿移动来验证捕获是否工作。
MIT © 2026 Janvias
- 低级别钩子无法捕获发送给更高权限(提权)窗口的输入;勾选设置页「以管理员身份运行」可解决
- 本工具仅记录按键名 / 按钮状态与时间差,不记录、不传输任何输入内容
- 日志按会话追加写入,同一文件可累积多次捕获记录(每次启动捕获写一行
==== 捕获会话 <时间> ====分隔) - 「显示内容」只影响悬浮窗;未勾选的类别不显示但仍会写入日志
- 连贯按键判定把鼠标移动排除在衔接基准之外(否则指针抖动会掩盖真正的断裂);抬起事件同样不作为基准
- 录制序列时「抬起」与「鼠标移动」不采集,因此序列只包含按下动作;录制期间会自动停止按旧序列核对