
简介PyMacroRecord 1.1.9.1 是一款面向办公自动化、软件测试及游戏操作的鼠标键盘宏录制与回放工具能将数据录入、重复点击、界面操作等连续动作用可视化方式录制为宏脚本。用户无需编写代码即可完成录制、编辑与回放并可按需调节播放速度、设置循环次数或跳过指定步骤。资源包内含473个文件共24.74MB打包了完整的Python 3.11运行环境及界面依赖组件。文件构成以msg宏数据、enc加密文件、tcl界面脚本、dll动态库、py/pyc程序主体及少量exe可执行程序为主gif、png等图片资源用于软件界面展示json与readme记录了配置和说明信息解压后可直接运行无需另装环境。目前已有118人学习下载。相比手动重复操作这套工具能显著提升工作效率尤其适合批量数据录入、重复表单填写或界面回归测试等场景录制好宏脚本后即可长时间自动执行。1. 一个.rar里的重复劳工为什么还需要手动点办公场景里大量机械操作根本算不上技术活每天开单、填报表、批量重命名、把 A 系统数据搬到 B 系统动辄半小时起步。PyMacroRecord 1.1.9.1 这类鼠标键盘宏录制回放工具解决的问题不是能不能自动化而是能不能不写代码就把自动化做出来。录制器把屏幕前的物理操作变成可回放的事件序列录一遍完整的操作之后就能无限次重放。1.1.9.1 这个版本在延时稳定性和连续回放上做了明显收敛适合日常处理长流程重复任务。它对 IT 从业者的价值在于临时性的自动化需求不值得写脚本时宏录制是最快路径而理解它的录制回放机制也能帮你判断哪些场景该用宏、哪些场景必须上代码。2. PyMacroRecord 的录制原理屏幕上的每次点击都被记成了什么2.1 鼠标键盘事件怎么被截获PyMacroRecord 属于全局钩子型录制器它监听的是操作系统层面的输入事件而不是某个窗口的消息。也就是说无论焦点窗口在哪只要鼠标在屏幕上移动、点击或者键盘有按键按下录制器都能捕获。常见的实现方式是基于 Windows 的 SetWindowsHookEx 挂低级键盘钩子和低级鼠标钩子或者用 Python 的 pynput、pyhook 这类库在用户态监听。录制时每个事件至少包含五个字段事件类型、虚拟键码或坐标、按下/释放状态、相对上一事件的时间间隔、附加标志位。以鼠标点击为例记录的不是在哪个窗口点了哪个按钮而是屏幕坐标和按键状态这决定了宏回放本质上是坐标驱动而非语义驱动。# 用 pynput 监听鼠标事件理解一个点击事件长什么样 from pynput import mouse def on_click(x, y, button, pressed): if pressed: print(ftypeclick, x{x}, y{y}, button{button.name}, statedown) else: print(ftypeclick, x{x}, y{y}, button{button.name}, stateup) with mouse.Listener(on_clickon_click) as listener: listener.join()这段代码演示了录制端最核心的捕获逻辑每次鼠标按键按下和抬起都输出一条事件记录包含坐标、按钮和状态。真实录制工具不会直接打印而是把这些字段附加时间戳后追加到内存列表里。键盘事件同理区别在于用虚拟键码VK表示按键、用 scan code 表示物理键位。2.2 事件序列的时间轴模型录到的原始事件必须加上时间信息才能回放。录制器通常记录的是相对延时也就是当前事件与上一个事件之间的毫秒间隔而不是绝对时间戳。这么做的好处是回放时可以整体缩放延时倍率而不需要把所有绝对时间重新对齐。一份录制结果的效果本质上就是一张时间轴上的事件表序号时间偏移(ms)事件类型参数说明10key_downVK0x11Ctrl 按下20key_downVK0x53S 按下3120key_upVK0x53S 抬起4130key_upVK0x11Ctrl 抬起53400mouse_move(960, 540)光标移动63450mouse_downleft, (960, 540)左键按下73470mouse_upleft, (960, 540)左键抬起每次录制操作时工具会同时启动一个高精度计时器将事件写入一个时间轴数组。回放时按数组顺序逐个取出事件先等待指定的延时再模拟输入。这个模型简单直接但它的弱点也很明显延时写死之后如果回放环境比录制环境卡顿或更快整个序列的节奏就会错位。2.3 过滤噪声坐标、延时与无效移动鼠标移动事件量极大一个流畅的拖动可能产生几百上千条 move 事件。录制器如果全量记录宏文件会膨胀且回放效果反而更差因为真实用户移动鼠标时存在大量抖动。大多数宏录制器对 mouse_move 做降采样只有坐标变化超过阈值才记录或者只记录关键帧。我一般会把移动降采样阈值设在 8~16 像素之间。过小会录进抖动过大则丢失弧线轨迹回放时点击落点可能偏离。延时过滤是另一个关键点。人手在连续操作之间的停顿通常包含无意识间隙比如从移动鼠标到按下左键之间的 200 毫秒犹豫。录制器会提供最小延时参数把小于阈值的间隔合并掉避免回放时出现大量急促的微小停顿。低版本工具往往不做过滤回放总比原速快一截1.1.9.1 这类新版本通常在录制端就有延时归一化处理。3. 回放为什么不是录了一遍再播一遍3.1 回放的两种模式精确回放与目标识别把录到的事件序列原样重新执行是最基础的回放方式。它忠实于原始坐标和原始延时实现成本低、稳定性高但致命弱点是脆弱目标窗口位置变了、屏幕分辨率变了、DPI 缩放变了回放就会点错位置。精确回放的坐标基准是虚拟屏幕坐标Windows 上主监视器左上角为 (0,0)多显示器环境下副屏可映射为负坐标区域。多数宏工具限制坐标值必须为非负也就是只在主监视器内有效。回放时的坐标不做任何换算原样移动并点击。进阶一点的工具会提供目标识别模式录制时额外截取点击位置的图像特征回放时先做模板匹配定位窗口或按钮的新坐标再基于相对位置进行点击。这种模式抗环境变化能力强但录制时需要多存一张截图匹配耗时也会增加回放的单步延迟。1.1.9.1 版本里如果提供精确回放和窗口内相对定位两种选择优先用后者因为它在鲁棒性和速度之间更平衡。3.2 延时补偿与系统负载单个事件的回放延时可以精确控制难的是整个序列的节奏一致性。Windows 不是实时操作系统time.sleep 或 WaitForSingleObject 在系统负载高时可能多等几十毫秒。宏回放工具在延时处理上通常有两层措施底层用多媒体定时器或高精度等待如 timeBeginPeriod(1)把时间片精度从默认 15.6 毫秒降到 1 毫秒。应用层则在每个事件回放结束后计算实际消耗时间下一事件的等待时间做动态补偿。假设录制时第 n1 个事件应比第 n 个事件晚 300 毫秒回放第 n 个事件实际耗时 180 毫秒则第 n1 个事件的等待时间修正为 300 - 180 120 毫秒。这样整体时长不会因为中间某次模拟输入变慢而累加误差。# 延时补偿回放的核心逻辑示意 import time timeline load_macro(repeat_task.json) start_global time.perf_counter() last_event_ts 0 for ev in timeline: target_ts ev.offset_ms wait_ms target_ts - last_event_ts # 记录本次事件实际模拟耗时动态补偿给下一次等待 t0 time.perf_counter() simulate(ev) actual_cost_ms (time.perf_counter() - t0) * 1000 # 等待 期望间隔 - 本次模拟实际耗时 adjusted_wait max(0, wait_ms - actual_cost_ms) time.sleep(adjusted_wait / 1000) last_event_ts target_ts这段代码体现的是事件模拟耗时从等待时间里扣除的思路。实际操作中模拟鼠标点击本身可能只消耗几毫秒但遇到目标程序卡顿、Modal 弹窗阻塞时实际耗时可能远超录制时的间隔单纯靠补偿无法解决这时就要在回放设置里加大整体延时倍率。3.3 回放失败的第一现场宏回放最常见的失败表现不是崩溃而是执行完但结果不对。具体来说有四种典型情况第一种是目标窗口失焦点击先落在窗口外把焦点切走后续所有操作全部错位。第二种是环境速度变化目标程序这次响应比录制时慢弹窗还没出现宏就已经在点下一步了。第三种是坐标偏移分辨率和 DPI 变化导致按钮位置整体平移。第四种是输入法干扰键盘事件发出后中文输入法拦截组合键导致热键没生效。回放工具能做的兜底是失败终止条件比如检测到某个窗口消失、某个文件出现就停止回放并记录日志。没有这个机制的话宏会在一套错误状态里继续执行造成数据重复提交等后果。4. 用 PyMacroRecord 录制并回放一套真实操作的完整流程4.1 准备工作与录制前环境检查解压 1.1.9.1 版本的压缩包后主程序与配置目录分开存放。首次启动前把分辨率固定为日常使用值关闭系统缩放自定义项并将目标业务软件窗口调整到固定位置。这一步很多人忽略录制前必须确认屏幕缩放为 100%否则录制的坐标和回放定位很可能出现偏移。桌面右键 → 显示设置 → 缩放确保是 100%多显示器用户确认目标窗口所在显示器编号录制期间不要切换。输入法切换为英文模式这一步很重要中文输入法在回放过程中出现候选框会完全打乱节奏。4.2 录制一段鼠标键盘操作序列启动录制后工具进入监听状态系统托盘出现录制指示图标。此时按正常速度执行一次完整操作注意两点每步之间停顿 1 秒左右匀速移动鼠标不要在目标位置上反复悬停或抖动。录制过程中出现误操作不要急于补救记下错误位置录完后用编辑器删除对应事件段。录制完成后保存为宏文件常见格式是 JSON 或自有的文本格式。1.1.9.1 版本通常允许把宏文件以 .py 格式导出方便二次编辑。一份 JSON 宏文件的核心结构{ meta: { version: 1.1.9, screen_size: [1920, 1080], scale: 1.0, delay_scale: 1.0 }, events: [ {type: move, x: 960, y: 540, delay: 0}, {type: click, x: 960, y: 540, button: left, delay: 320}, {type: key, vk: 0x11, action: down, delay: 80}, {type: key, vk: 0x53, action: down, delay: 0}, {type: key, vk: 0x53, action: up, delay: 60}, {type: key, vk: 0x11, action: up, delay: 20}, {type: type, text: 2026-07-21.xlsx, delay: 150} ] }字段说明delay表示该事件与上一条事件之间的等待毫秒数screen_size用于回放时校验当前分辨率是否一致vk是键盘虚拟键码0x11对应 Ctrl0x53对应 S。type字段为text时表示直接输入字符串文本这个回放时会按字符拆分并模拟键盘事件。4.3 回放、循环与速度参数的首次设置加载宏文件后进入回放设置界面重点关注三个参数回放次数、延时倍率和失败停止条件。回放次数直接填需要的循环次数延时倍率默认为 1.0 即原速回放。如果目标程序是 Web 系统第一次安全区间的倍率开到 1.3 到 1.5如果目标程序是本地桌面软件且响应稳定1.0 到 1.2 更合适。倍率调大的代价是执行时间变长一个 2 分钟的宏在 1.5 倍速下要跑 3 分钟循环 20 次就是 1 小时。失败停止条件建议设置为当屏幕坐标 (x, y) 区域颜色与录制时不一致时暂停但很多场景下目标区域的像素值本身不稳定所以更稳妥的是设置固定等待完成后继续而不是检测到变化才继续。两者区别前者是在两个步骤之间强制追加 300~500 毫秒的保底等待后者依赖视觉反馈。1.1.9.1 版本里如果提供像素检测可以把检测点设在窗口标题栏或状态栏这部分在操作过程中不会因为内容变化而改变颜色。4.4 命令行与批量调用GUI 循环回放适合前台演示但真正的批处理场景要走命令行调用。较新版本的宏工具一般都会提供类似-r macro_file.json -n 10这样的参数入口实际参数名可能不同但基本思路一致。# 命令行回放示例假设工具提供 CLI 入口 PyMacroRecord.exe -r repeat_task.json -n 5 --delay-scale 1.2 --stop-on-error # 把回放结果写日志便于事后检查 PyMacroRecord.exe -r repeat_task.json -n 100 --log-file run.log --log-level info命令行回放的优势在于可以交给脚本编排比如系统初始化完成后触发回放或者用批处理串联多个宏# 串行执行多个宏文件实现长流程 PyMacroRecord.exe -r step1_login.json -n 1 --wait 2000 PyMacroRecord.exe -r step2_fill_data.json -n 50 --delay-scale 1.3 PyMacroRecord.exe -r step3_export_report.json -n 1 --wait 5000执行顺序和参数意义第一个宏登录系统后等待 2 秒给页面留出加载时间第二个宏循环填 50 条数据倍率放大到 1.3 防止输入过快丢失按键第三个宏导出报表并等待 5 秒让文件落盘。命令行模式还方便纳入批处理脚本比如for /L %i in (1,1,10) do PyMacroRecord.exe -r daily_task.json -n 1。5. 录制回放工具的关键参数调优与排错指引5.1 3 个必调参数延时倍率、误差容限、失败重试参数作用范围推荐设置调错时的现象延时倍率全局稳定环境 1.0~1.2网页 1.3~1.5目标程序丢失输入点击无响应坐标误差容限单次点击相对定位模式 6~12 px绝对定位 0 px按钮高亮但无法触发或点进相邻按钮失败重试次数整段回放1~2 次超过即终止重复提交数据、产生重复单据延时倍率是最影响成败的全局参数。回放机与录制机器性能差异大时录入时 200 毫秒的点击间隔在目标程序高负载状态可能不够但倍率过高会让整个流程周期拉长大批量循环时浪费时间。坐标误差容限在精确回放模式下无效只在相对定位或窗口内坐标模式起作用。误差容限设置过大会出现在正确位置附近漂移的现象可以使用 8 像素作为起点。注意Windows 默认的窗口边框和阴影区域会导致实际按钮位置偏移录制宏时关闭目标程序界面的缩放和主题动画可以明显提升点击准确度。失败重试是个双刃剑。重试 1 次可以应对瞬时弹窗抖动但对重复提交类操作不适用。建议重试次数永远不要大于 2且必须配合结果校验来判断本次操作是否真的失败。5.2 高 DPI 与多显示器场景下的坐标偏移高 DPI 是宏回放界的头号坐标杀手。录制时 100% 缩放、回放时系统缩放为 150%点击坐标按缩放比例换算后整体偏移 1/3。1.1.9.1 版本如果支持 DPI 感知会读取系统的 DPI 设置并做坐标换算不支持的话唯一安全做法是录制和回放都固定在同一缩放级别。# 一个简单的坐标换算模型原始坐标按缩放比例换算 def translate_coord(raw_x: int, raw_y: int, from_scale: float, to_scale: float) - tuple: ratio to_scale / from_scale return int(raw_x * ratio), int(raw_y * ratio) # 例子录制时 100% 缩放、回放时 150% 缩放 new_x, new_y translate_coord(960, 540, 1.0, 1.5) print(new_x, new_y) # 输出 (1440, 810)多显示器场景还需要注意坐标映射方式Windows 允许副屏在左侧或右侧副屏坐标可以为负。录制工具如果不支持虚拟屏幕会把负坐标裁掉回放自然错位。处理方法是最小化主显示器之外的空间占用录制期间副屏保持同一布局。5.3 权限与安全软件拦截的坑回放工具模拟输入的方式决定了它会被安全软件盯上。Windows 的 UIPI用户界面特权隔离机制阻止低权限进程向高权限窗口发送输入典型现象是宏回放时鼠标在动但目标程序没反应。运行 PyMacroRecord 时建议使用管理员权限目标程序如果是管理员权限运行录制器也必须同权限。安全软件方面宏工具的回放行为特征与自动点击器重叠容易被拦截。如果回放过程中出现目标程序无响应但光标正常移动先把宏工具目录加入安全软件白名单再检查是否以管理员权限运行。5.4 录制文件的编辑与二次处理录制文件是 JSON 时完全可以脱离工具手动修改。常见操作包括删除一段误操作的连续事件修正某次点击的具体坐标把两个宏文件拼接成一个甚至批量替换坐标值。手工编辑要注意事件间的 delay 链。删除某个事件后它的 delay 需要合并到相邻事件上否则后续所有事件都会提前执行。例如一条 move 事件 delay 为 400紧接的 click 事件 delay 为 0删除 move 后 click 的 delay 应改为 400。利用文本编辑器的查找替换可以快速实现坐标批量平移比如把所有 x 坐标统一增加 50 像素整个宏就从窗口左侧平移到居中位置。6. 进阶技巧把宏录制回放升级为半自动流程6.1 条件判断与人工接管的混合作业宏录制回放如果要处理真实业务纯录什么播什么远远不够。一个实用的模式是宏负责重复、人工负责决策宏跑完一阶段操作后弹出一个确认框人工检查没问题再按键继续。实现方式是录制宏时在需要人工确认的步骤处插入快捷键暂停等待按键后继续回放。6.2 用日志定位每次回放的问题给每次回放开启日志输出记录每一步事件的实际执行时间和执行结果。之后用一个小脚本分析日志# 解析回放日志找出耗时异常的事件步骤 import json with open(run.log, encodingutf-8) as f: lines f.readlines() for line in lines[1:]: parts line.strip().split(,) # 日志格式: seq,event,expected_ms,actual_ms seq, event, expected, actual parts diff int(actual) - int(expected) if diff 200: print(f事件 {seq} ({event}) 超出预期 {diff}ms)这段代码筛出的超时事件往往就是整套流程的瓶颈点。逐条修正宏文件中对应位置的延时比整体调大倍率更精准。6.3 验证回放效果三次一致才算稳任何重要宏文件交付前执行三轮测试第一轮在录制环境原速回放确认功能性第二轮把延时倍率调到 1.5 验证节奏鲁棒性第三轮把窗口整体移动到屏幕右下角用相对定位模式回放检验坐标适配。三轮都通过后宏才能挂到计划任务里持续运行。对于 PyMacroRecord 1.1.9.1 这类工具最值得投入的不是研究它的所有按钮而是建立一整套校验习惯录制前固定环境、回放中记录日志、使用后分析偏差。工具只是执行端真正保证可靠的是你设置在宏前后的那些验证步骤。本文还有配套的精品资源点击获取