A lightweight Windows mouse highlight overlay tool with halo circle and click ripple animations, built with C++17 and Win32 API.
160 lines
5.0 KiB
Markdown
160 lines
5.0 KiB
Markdown
# 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 (推荐):**
|
||
|
||
```bash
|
||
mkdir build && cd build
|
||
cmake -G "Visual Studio 17 2022" -A x64 ..
|
||
cmake --build . --config Release
|
||
```
|
||
|
||
编译产物位于 `build/Release/MouseHighlighter.exe`。
|
||
|
||
**MinGW:**
|
||
|
||
```bash
|
||
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`,格式如下:
|
||
|
||
```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 MB,24 小时运行无增长
|
||
- 渲染延迟:< 10ms (P95)
|
||
|
||
## 常见问题
|
||
|
||
**Q: 窗口不显示?**
|
||
确保 DWM 合成已启用(Windows 10/11 默认开启)。全屏独占应用下叠加层会被隐藏。
|
||
|
||
**Q: 鼠标有延迟?**
|
||
降低波纹并发数或检查是否有其他全局钩子程序冲突。
|
||
|
||
**Q: 找不到 `dwmapi.h`?**
|
||
安装 Windows SDK,可通过 Visual Studio Installer 添加。
|
||
|
||
## License
|
||
|
||
MIT
|