MouseControl v1.0 是一款面向 Windows 场景的键鼠宏配置与执行工具,主要解决重复性键盘、鼠标操作需要手动执行、难以保存复用和难以适配不同窗口尺寸的问题。软件通过桌面 GUI 提供目标窗口选择、配置文件管理、宏步骤编辑、循环执行和运行状态控制等功能。用户可以在界面中选择当前可见窗口,创建或加载 JSON 宏配置,并编辑延迟、按键单击、按键按下/松开、鼠标移动、鼠标点击、随机移动、随机按键等步骤。程序支持 F8 启停、F12 紧急停止,执行时会根据目标窗口位置和尺寸进行坐标换算,支持基准分辨率坐标、绝对屏幕坐标和窗口归一化坐标,适合窗口大小变化或多分辨率环境下的自动化操作。同时项目提供诊断工具,用于检查 DLL 加载、驱动连接、屏幕 DPI、窗口列表、光标位置和键盘接口调用状态,方便快速定位运行问题。
项目采用 Python 桌面应用架构,game_macro.py 负责主界面、配置管理、宏编辑器、热键监听和执行调度,logitech_driver.py 通过 ctypes 封装 ghub_device.dll,提供驱动级鼠标移动、点击、键盘按下/松开等能力,配置数据统一以 JSON 文件保存在 configs 目录中。我的主要工作包括设计 Tkinter 控制台式界面、实现 10 类宏步骤的可视化编辑、配置文件的新建/重命名/保存/加载、目标窗口枚举与坐标转换、后台线程执行宏循环,以及 F8/F12 热键控制。项目中重点解决了几个难点:一是 Windows DPI 缩放导致坐标偏移,通过设置进程 DPI 感知并按窗口尺寸换算坐标处理;二是部分环境下 DLL 绝对移动不稳定,改用闭环相对移动算法多次逼近目标坐标;三是宏中断后可能残留按键按住状态,因此维护已按下键盘和鼠标集合,在停止时统一释放并增加常用按键兜底释放;四是全局热键可能被全屏窗口或权限限制拦截,因此同时提供 Tkinter 绑定、keyboard 全局热键和 Win32 GetAsyncKeyState 备用监控,提高紧急停止可靠性。