+
29
-

回答

使用 Python 实现类似按键精灵的录制和回放功能,主要依赖于能够监听和模拟键盘鼠标事件的库。

pynput 是一个非常流行且跨平台的库,可以很好地完成这个任务。

下面是一个基本实现的步骤和代码示例:

核心思路:

录制阶段:

启动键盘和鼠标事件监听器。

记录每个事件(按键按下/释放,鼠标点击/移动/滚动)及其发生的时间(或与上一个事件的时间间隔)。

将这些事件和时间信息存储在一个列表中。

回放阶段:

遍历存储的事件列表。

根据记录的时间间隔,使用 time.sleep() 来模拟原始操作的节奏。

使用相应的控制器(键盘控制器、鼠标控制器)来模拟事件。

所需库:

pip install pynput

完整示例代码:

点击打开链接

如何运行:

将代码保存为 .py 文件(例如 auto_macro.py)。

确保已安装 pynput (pip install pynput)。

在终端运行脚本:python auto_macro.py。

根据提示操作:

F8:按下开始录制,再次按下 F8 停止录制。录制的内容会自动保存到 recording.json。

F9:回放 recording.json 中的内容(如果脚本启动时加载了它,或者刚刚录制完成)。

ESC (在回放时):中断当前的回放。

F12:退出程序。

重要注意事项和改进点:

权限 (Linux/macOS):

Linux: 你可能需要以 root 权限运行,或者将你的用户添加到 input 组,并确保 X服务器允许监听输入事件。

macOS: 你需要在 "系统偏好设置" -> "安全性与隐私" -> "隐私" -> "辅助功能" 中,为你运行脚本的终端或 IDE 程序授予权限。

精确性:

time.sleep() 的精度有限,特别是在高负载系统上,可能导致回放时机略有偏差。

鼠标移动是离散记录的,如果录制时鼠标移动非常平滑快速,回放时可能会显得有些跳跃。可以增加记录鼠标移动的频率,但这会产生大量事件。

特殊键和组合键:

pynput 对特殊键(Ctrl, Shift, Alt, Space, Enter 等)有良好的支持。

组合键(如 Ctrl+C)会被录制为 Ctrl按下 -> C按下 -> C释放 -> Ctrl释放。回放时也会按此顺序模拟。

窗口焦点: 这个脚本不会记录或处理窗口焦点。回放时,它会在当前拥有焦点的窗口上执行操作。如果你在录制时切换了窗口,回放时需要手动确保焦点在正确的窗口上。高级的按键精灵会尝试记录窗口句柄/名称。

错误处理: 可以添加更多的错误处理,例如在回放时如果某个窗口不存在或无法交互。

GUI界面: 为了更友好的用户体验,可以使用 Tkinter, PyQt, Kivy 等库创建一个图形用户界面,而不是纯命令行。

停止回放的可靠性: 在回放过程中监听按键(如ESC)来停止回放,如果回放的动作本身也包含大量的键盘输入,可能会有冲突或延迟。可以考虑将回放操作放到一个单独的线程,主线程负责监听停止信号。当前代码中,ESC键的监听依赖于主键盘监听器在回放时仍然有效(或启动一个临时的)。

last_event_time 的共享: last_event_time = [start_time] 技巧是使用列表(可变对象)来让回调函数能修改外部作用域的变量。更 Pythonic 的方式可能是使用类的成员变量。

parse_key 函数: 这个函数用于将存储的字符串键名转换回 pynput 的键对象。对于 KeyCode 类型的键(通常是某些系统特定的键或通过 vk 码生成的键),转换可能需要更复杂的逻辑,取决于它们是如何被 str(key) 转换的。当前版本主要处理 Key.xxx 和普通字符。

网友回复

我知道答案,我要回答