Files
MouseHighlighter/README.md
digouyou 326306d76a Initial commit: MouseHighlighter project
A lightweight Windows mouse highlight overlay tool with halo circle
and click ripple animations, built with C++17 and Win32 API.
2026-05-27 16:46:07 +08:00

5.0 KiB
Raw Permalink Blame History

MouseHighlighter

一个极轻量级的 Windows 桌面鼠标高亮工具,使用 C++17 + Win32 API 编写。通过全屏透明叠加层,在鼠标光标周围渲染半透明光晕圆圈和点击波纹动画,方便演示、录屏、教学等场景下突出显示鼠标操作。

功能特性

  • 光晕圆圈 — 跟随鼠标光标,支持自定义颜色、大小、透明度、粗细、填充模式
  • 点击波纹 — 鼠标左/右键点击时触发扩散波纹动画,可配置颜色、大小、速度、数量(最多 12 个并发)
  • 全屏透明叠加层 — 点击穿透,不影响正常操作
  • 多显示器 & DPI 感知 — 自动适配多屏环境和高分辨率显示器
  • 系统托盘管理 — 右键托盘图标即可调整所有参数,支持开机自启
  • 配置持久化 — 所有设置自动保存到 INI 文件,重启后保留
  • 脏矩形优化 — 仅重绘变化区域CPU 占用极低
  • EMA 坐标平滑 — 可选的光标坐标指数移动平均平滑,减少抖动

截图示意

  ┌─────────────────────────────┐
  │                             │
  │         ╭───────╮           │
  │         光晕圆圈 ╲          │
  │       │   ◉ 鼠标   │         │
  │        ╲                   │
  │         ╰───────╯           │
  │       ╭ ─ ─ ─ ─ ─╮         │
  │      ╭  点击波纹  ╮          │
  │     ╭  (扩散动画)  ╮         │
  │                             │
  └─────────────────────────────┘
  透明叠加层,点击穿透

项目结构

MouseHighlighter/
├── include/
│   ├── MouseHighlighter.h      # 主应用类声明
│   ├── SharedState.h           # 无锁环形队列与线程间通信
│   ├── DataStructures.h        # DIB 缓冲区、波纹状态、脏矩形追踪
│   └── Config.h                # 配置结构体与 INI 读写
├── src/
│   ├── main.cpp                # 程序入口、DPI 感知初始化
│   ├── MouseHighlighter.cpp    # 核心实现:窗口、渲染、托盘、消息循环
│   └── Config.cpp              # INI 文件解析器
├── res/                        # 资源目录(预留)
├── CMakeLists.txt              # CMake 构建脚本
├── BUILD.md                    # 详细构建指南
└── README.md                   # 本文件

快速开始

前提条件

  • Windows 10+Windows 7+ 理论支持)
  • CMake 3.15+
  • MSVC 2019+ 或 MinGW

编译

Visual Studio (推荐)

mkdir build && cd build
cmake -G "Visual Studio 17 2022" -A x64 ..
cmake --build . --config Release

编译产物位于 build/Release/MouseHighlighter.exe

MinGW

mkdir build && cd build
cmake -G "MinGW Makefiles" ..
cmake --build .

运行

双击 MouseHighlighter.exe 即可。程序启动后会在系统托盘显示图标ESC 键可退出。

托盘菜单

右键托盘图标可调整以下设置:

菜单项 说明
光晕颜色 蓝色 / 黄色
光晕大小 S / M / L / XL / XXL
光晕透明度 低 / 中 / 高
光晕质量 普通 / 高 / 极高SSAA 级别)
实心填充 切换空心圆环 / 实心圆
波纹颜色 绿 / 蓝 / 粉
波纹大小 S / M / L / XL / XXL
波纹透明度 低 / 中 / 高
波纹速度 慢 / 中 / 快
启用波纹 开 / 关
开机自启 注册 / 取消 Windows 自启动
退出 关闭程序

配置文件

配置自动保存在 %APPDATA%\MouseHighlighter\config.ini,格式如下:

[Halo]
ColorARGB=0x660099FF
Radius=30.0
Thickness=1.5

[Ripple]
ColorARGB=0x3300FF99
MaxRadius=120.0
DurationMS=240
Thickness=2.5

[Smoothing]
Alpha=0.25

[Timing]
TargetFPS=60
UpdateIntervalMS=17

技术要点

项目 说明
叠加窗口 WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_TOPMOST,全屏覆盖且点击穿透
渲染方式 软件光栅化,逐像素 Porter-Duff Alpha 混合
抗锯齿 超级采样1x / 2x2 / 3x3 SSAA
光标追踪 GetCursorPos() 轮询 + 可选 EMA 平滑
点击检测 GetAsyncKeyState() 异步按键状态查询
帧率控制 MsgWaitForMultipleObjects 超时驱动,默认 ~60fps
内存管理 空闲时 EmptyWorkingSet() 回收工作集

性能

  • CPU静止 < 1%,移动时 2-5%,多波纹并发 < 9%
  • 内存:< 30 MB24 小时运行无增长
  • 渲染延迟:< 10ms (P95)

常见问题

Q: 窗口不显示? 确保 DWM 合成已启用Windows 10/11 默认开启)。全屏独占应用下叠加层会被隐藏。

Q: 鼠标有延迟? 降低波纹并发数或检查是否有其他全局钩子程序冲突。

Q: 找不到 dwmapi.h 安装 Windows SDK可通过 Visual Studio Installer 添加。

License

MIT