Install
openclaw skills install @thcjp/desktop-automation-hub-freeopenclaw skills install @thcjp/desktop-automation-hub-free让AI Agent精准操控你的桌面。鼠标、键盘、截图、窗口、剪贴板,五大核心能力开箱即用。
桌面自动化中枢为AI Agent提供像素级桌面操控能力。无论是重复性表单填写、批量截图归档,还是跨应用数据搬运,都能通过简洁的API调用完成。内置failsafe紧急停止机制,将鼠标移至屏幕四角即可立即中止所有自动化操作,确保任务安全可控。
┌─────────────────────────────────────────────────────────┐
│ 桌面自动化中枢 (免费版) │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 鼠标控制 │ │ 键盘控制 │ │ 屏幕操作 │ │
│ │ Mouse │ │ Keyboard │ │ Screen │ │
│ │ │ │ │ │ │ │
│ │ 定位/点击 │ │ 输入/热键 │ │ 截图/取色 │ │
│ │ 滚轮/拖拽 │ │ 按键组合 │ │ 分辨率 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 窗口管理 │ │ 剪贴板 │ │ 安全机制 │ │
│ │ Window │ │ Clipboard│ │ Safety │ │
│ │ │ │ │ │ │ │
│ │ 列表/激活 │ │ 读/写 │ │ Failsafe │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
安装依赖并执行第一个自动化操作:
# 依赖说明
pip install pyautogui pillow pygetwindow
from desktop_automation_hub import DesktopController
# 初始化控制器(开启failsafe紧急停止)
dc = DesktopController(failsafe=True)
# 第一个自动化操作:移动鼠标并截图
dc.move_mouse(500, 300) # 移动到坐标(500, 300)
dc.click() # 左键单击
dc.hotkey('ctrl', 'c') # 复制
dc.screenshot(filename='first_capture.png') # 截图保存
紧急停止:随时将鼠标快速移至屏幕任一角落(左上/右上/左下/右下),立即中止所有自动化操作。
| 功能 | 方法 | 说明 |
|---|---|---|
| 绝对定位 | move_mouse(x, y, duration=0, smooth=True) | 移动到屏幕绝对坐标 |
| 相对移动 | move_relative(x_offset, y_offset, duration=0) | 相对当前位置移动 |
| 单击 | click(x=None, y=None, button='left', clicks=1) | 左/右/中键单击或双击 |
| 拖拽 | drag(start_x, start_y, end_x, end_y, duration=0.5) | 从A点拖拽至B点 |
| 滚轮 | scroll(clicks, direction='vertical') | 垂直或水平滚动 |
| 位置追踪 | get_mouse_position() | 获取当前鼠标坐标 |
# 平滑移动到目标位置(1秒动画)
dc.move_mouse(1000, 500, duration=1.0)
# 右键点击
dc.click(500, 300, button='right')
# 双击
dc.click(500, 300, clicks=2)
# 向下滚动5格
dc.scroll(-5)
# 拖拽文件从(200,300)到(800,500)
dc.drag(200, 300, 800, 500, duration=1.0)
输入: 用户提供一、鼠标控制所需的指令和必要参数。 处理: 按照skill规范执行一、鼠标控制操作,遵循单一意图原则。 输出: 返回一、鼠标控制的执行结果,包含操作状态和输出数据。
| 功能 | 方法 | 说明 |
|---|---|---|
| 文本输入 | type_text(text, interval=0, wpm=None) | 按字或按WPM速度输入 |
| 单键按下 | press(key, presses=1) | 按下并释放单个键 |
| 热键组合 | hotkey(*keys, interval=0.05) | 组合键如Ctrl+C |
| 按住/释放 | key_down(key) / key_up(key) | 手动控制按键状态 |
# 快速输入文本
dc.type_text("你好,桌面自动化中枢")
# 模拟人类打字速度(每分钟60词)
dc.type_text("Hello World", wpm=60)
# 常用热键
dc.hotkey('ctrl', 'c') # 复制
dc.hotkey('ctrl', 'v') # 粘贴
dc.hotkey('ctrl', 's') # 保存
dc.hotkey('ctrl', 'a') # 全选
dc.hotkey('win', 'r') # 打开运行窗口
# 按住Shift输入大写
dc.key_down('shift')
dc.type_text("hello") # 实际输入"HELLO"
dc.key_up('shift')
输入: 用户提供二、键盘控制所需的指令和必要参数。 处理: 按照skill规范执行二、键盘控制操作,遵循单一意图原则。 输出: 返回二、键盘控制的执行结果,包含操作状态和输出数据。
| 功能 | 方法 | 说明 |
|---|---|---|
| 全屏截图 | screenshot(filename=None) | 截取整个屏幕 |
| 区域截图 | screenshot(region=(left, top, w, h)) | 截取指定区域 |
| 像素取色 | get_pixel_color(x, y) | 获取坐标处RGB颜色 |
| 屏幕尺寸 | get_screen_size() | 获取屏幕分辨率 |
# 全屏截图
img = dc.screenshot()
dc.screenshot(filename='full_screen.png')
# 区域截图(左100, 上100, 宽800, 高600)
dc.screenshot(region=(100, 100, 800, 600), filename='region.png')
# 获取像素颜色
r, g, b = dc.get_pixel_color(500, 300)
print(f"坐标(500,300)颜色: RGB({r}, {g}, {b})")
# 获取屏幕分辨率
width, height = dc.get_screen_size()
print(f"屏幕分辨率: {width}x{height}")
输入: 用户提供三、屏幕操作所需的指令和必要参数。 处理: 按照skill规范执行三、屏幕操作操作,遵循单一意图原则。 输出: 返回三、屏幕操作的执行结果,包含操作状态和输出数据。
| 功能 | 方法 | 说明 |
|---|---|---|
| 窗口列表 | get_all_windows() | 获取所有打开的窗口标题 |
| 激活窗口 | activate_window(title_substring) | 按标题模糊匹配激活 |
| 当前窗口 | get_active_window() | 获取当前焦点窗口标题 |
# 列出所有窗口
windows = dc.get_all_windows()
for title in windows:
print(f"窗口: {title}")
# 激活Chrome浏览器
dc.activate_window("Chrome")
# 激活VS Code
dc.activate_window("Visual Studio Code")
# 查看当前焦点窗口
active = dc.get_active_window()
print(f"当前窗口: {active}")
输入: 用户提供四、窗口管理所需的指令和必要参数。 处理: 按照skill规范执行四、窗口管理操作,遵循单一意图原则。 输出: 返回四、窗口管理的执行结果,包含操作状态和输出数据。
# 写入剪贴板
dc.copy_to_clipboard("这是要复制的内容")
# 读取剪贴板
text = dc.get_from_clipboard()
print(f"剪贴板内容: {text}")
输入: 用户提供五、剪贴板操作所需的指令和必要参数。 处理: 按照skill规范执行五、剪贴板操作操作,遵循单一意图原则。 输出: 返回五、剪贴板操作的执行结果,包含操作状态和输出数据。
input_params参数,支持创建/查询/导出操作# 开启failsafe(推荐始终开启)
dc = DesktopController(failsafe=True)
# 暂停机制
dc.pause(2.0) # 暂停2秒
# 安全检查
if dc.is_safe():
dc.click(500, 500)
| 安全特性 | 说明 |
|---|---|
| Failsafe | 鼠标移至屏幕四角立即中止 |
| 边界检查 | 防止坐标超出屏幕范围 |
| 暂停控制 | 可编程暂停与恢复 |
| 日志记录 | 所有自动化操作可追踪 |
输入: 用户提供六、安全机制所需的指令和必要参数。 处理: 按照skill规范执行六、安全机制操作,遵循单一意图原则。 输出: 返回六、安全机制的执行结果,包含操作状态和输出数据。 能力覆盖范围:本skill的核心能力覆盖以下场景关键词:鼠标键盘精准控制、与屏幕截图核心能、秒上手桌面自动化、覆盖表单填写与窗、口操作基础场景、桌面自动化中枢、免费版、Agent、提供桌面级精准操、控能力、覆盖鼠标定位、键盘输入、屏幕截图、窗口激活与剪贴板、操作五大核心模块、failsafe、紧急停止机制、确保自动化任务可、控可中断、Use、when、需要提升效率、自动化流程、批量处理、工作流优化时使用、不适用于需要人工、创意判断的任务、适用于独立开发者、企业团队和自动化、工作流场景等。
| 类别 | 键名 |
|---|---|
| 字母 | 'a' ~ 'z' |
| 数字 | '0' ~ '9' |
| 功能键 | 'f1' ~ 'f24' |
| 回车 | 'enter' / 'return' |
| 退出 | 'esc' / 'escape' |
| 空格 | 'space' / 'spacebar' |
| 制表 | 'tab' |
| 退格 | 'backspace' |
| 删除 | 'delete' / 'del' |
| 方向键 | 'up' / 'down' / 'left' / 'right' |
| 修饰键 | 'ctrl' / 'shift' / 'alt' / 'win' |
| 锁定键 | 'capslock' / 'numlock' / 'scrolllock' |
痛点:每月需手动录入200+条员工信息至系统表单,重复点击、输入、Tab切换耗时且易错。
解决方案:
dc = DesktopController(failsafe=True)
# 假设表单字段顺序:姓名 -> 邮箱 -> 部门 -> 工号
records = [
("张三", "zhangsan@company.com", "技术部", "T00231"),
("李四", "lisi@company.com", "市场部", "M00452"),
]
for name, email, dept, emp_id in records:
dc.click(300, 200) # 点击姓名输入框
dc.type_text(name, wpm=80)
dc.press('tab')
dc.type_text(email, wpm=80)
dc.press('tab')
dc.type_text(dept, wpm=80)
dc.press('tab')
dc.type_text(emp_id, wpm=80)
dc.press('enter') # 提交
dc.pause(0.5) # 等待页面刷新
效果:200条记录从4小时缩短至15分钟,错误率降至0。
痛点:测试报告需要截取多个应用界面的截图,手动逐一截取并命名效率低下。
解决方案:
import datetime
dc = DesktopController(failsafe=True)
apps = ["Chrome", "VS Code", "Notion", "Slack"]
for app in apps:
dc.activate_window(app)
dc.pause(1.0) # 等待窗口切换
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
dc.screenshot(filename=f"capture_{app}_{timestamp}.png")
效果:10个应用截图从5分钟缩短至30秒,文件名自动规范化。
痛点:需要从数据库客户端复制查询结果,切换到Excel粘贴,重复操作数十次。
解决方案:
dc = DesktopController(failsafe=True)
# 从数据库客户端复制
dc.activate_window("DBeaver")
dc.pause(0.5)
dc.hotkey('ctrl', 'a') # 全选结果
dc.hotkey('ctrl', 'c') # 复制
# 切换到Excel粘贴
dc.activate_window("Excel")
dc.pause(0.5)
dc.hotkey('ctrl', 'v') # 粘贴
dc.press('down') # 移动到下一行
效果:跨应用数据搬运完全自动化,避免手动切换窗口的注意力损耗。
通常是DPI缩放导致的。Windows系统在"显示设置"中将缩放调整为100%即可。也可通过 dc.get_screen_size() 确认实际分辨率。部分应用在高DPI下坐标会偏移,建议先截图确认坐标再操作。
部分应用(如游戏、安全软件)会屏蔽模拟输入。解决方案:(1) 以管理员身份运行Python;(2) 增大 interval 参数(如 interval=0.1);(3) 确认目标窗口已获得焦点(先用 activate_window 激活)。
如果鼠标经常碰到屏幕角落导致中止,可以:(1) 操作时远离屏幕四角;(2) 在不需要时通过 DesktopController(failsafe=False) 关闭(不推荐用于生产环境);(3) 调整屏幕边距容差。
免费版支持基础的多显示器操作,但副显示器可能存在负坐标。使用 get_screen_size() 确认主屏分辨率,副屏坐标需根据系统配置计算。高级多显示器管理(独立截图、窗口定位)请使用专业版。
建议:(1) 始终开启 failsafe=True;(2) 重要操作前先用 screenshot 预览目标位置;(3) 使用 pause 控制操作节奏;(4) 批量操作前先小批量测试;(5) 操作日志可追踪每次执行的坐标与按键。
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| PyAutoGUI | Python库 | 必需 | pip install pyautogui |
| Pillow | Python库 | 必需 | pip install pillow |
| PyGetWindow | Python库 | 必需 | pip install pygetwindow |
| OpenCV | Python库 | 可选 | pip install opencv-python(图像识别功能需要) |
| LLM API | API | 必需 | 由Agent平台内置LLM提供 |
本技能基于原始开源作品改进,保留原始版权声明:
本改进作品在原始作品基础上进行了深度差异化改造,包括但不限于:
原始MIT license允许使用、复制、修改和分发,需保留版权声明。本改进作品在保留原始版权声明的基础上添加自有署名,完全符合MIT license要求。
本免费体验版限制以下高级功能:
find_on_screen 模板匹配(无法自动定位屏幕上的按钮/图标)解锁全部功能请使用专业版:desktop-automation-hub-pro
### 60秒上手
安装依赖并执行第一个自动化操作:
```bash
| 错误场景 | 原因 | 处理方式 |
|---|---|---|
| 配置错误 | 参数缺失或格式错误 | 检查依赖说明中的配置要求 |
| 运行时错误 | 运行环境不满足 | 确认运行环境符合依赖说明 |
| 网络错误 | 连接超时或不可达 | 执行ping命令测试网络连通性,检查防火墙和代理设置连接后执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令,参考国内替代方案 |