用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/lza6/Claude-code-cli-config --skill desktop-control命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | desktop-control |
| description | 高级桌面自动化。**Auto-trigger**: 当需要桌面控制、鼠标键盘操作、截图、窗口管理时自动使用。 |
OpenClaw 最先进的高级桌面自动化技能。 提供像素级精确的鼠标控制、超快的键盘输入、屏幕捕获、窗口管理和剪贴板操作。
首先,安装所需的依赖项:
pip install pyautogui pillow opencv-python pygetwindow
from skills.desktop_control import DesktopController
# 初始化控制器
dc = DesktopController(failsafe=True)
# 鼠标操作
dc.move_mouse(500, 300) # 移动到坐标
dc.click() # 在当前位置左键点击
dc.click(100, 200, button="right") # 在指定位置右键点击
# 键盘操作
dc.type_text("Hello from OpenClaw!")
dc.hotkey("ctrl", "c") # 复制
dc.press("enter")
# 屏幕操作
screenshot = dc.screenshot()
position = dc.get_mouse_position()
move_mouse(x, y, duration=0, smooth=True)将鼠标移动到绝对屏幕坐标。
参数:
x (int): X 坐标(距左侧的像素)y (int): Y 坐标(距顶部的像素)duration (float): 移动时间(秒)(0 = 即时,0.5 = 平滑)smooth (bool): 使用贝塞尔曲线进行自然移动示例:
# 即时移动
dc.move_mouse(1000, 500)
# 平滑 1 秒移动
dc.move_mouse(1000, 500, duration=1.0)
move_relative(x_offset, y_offset, duration=0)相对于当前位置移动鼠标。
参数:
x_offset (int): 水平移动像素(正值 = 向右)y_offset (int): 垂直移动像素(正值 = 向下)duration (float): 移动时间(秒)示例:
# 向右移动 100px,向下移动 50px
dc.move_relative(100, 50, duration=0.3)
click(x=None, y=None, button='left', clicks=1, interval=0.1)执行鼠标点击。
参数:
x, y (int, 可选): 点击坐标(None = 当前位置)button (str): 'left'、'right'、'middle'clicks (int): 点击次数(1 = 单击,2 = 双击)interval (float): 多次点击之间的延迟示例:
# 简单左键点击
dc.click()
# 在特定位置双击
dc.click(500, 300, clicks=2)
# 右键点击
dc.click(button='right')
drag(start_x, start_y, end_x, end_y, duration=0.5, button='left')拖放操作。
参数:
start_x, start_y (int): 起始坐标end_x, end_y (int): 结束坐标duration (float): 拖动持续时间button (str): 使用的鼠标按钮示例:
# 将文件从桌面拖到文件夹
dc.drag(100, 100, 500, 500, duration=1.0)
scroll(clicks, direction='vertical', x=None, y=None)滚动鼠标滚轮。
参数:
clicks (int): 滚动量(正值 = 向上/向左,负值 = 向下/向右)direction (str): 'vertical' 或 'horizontal'x, y (int, 可选): 滚动位置示例:
# 向下滚动 5 格
dc.scroll(-5)
# 向上滚动 10 格
dc.scroll(10)
# 水平滚动
dc.scroll(5, direction='horizontal')
get_mouse_position()获取当前鼠标坐标。
返回: (x, y) 元组
示例:
x, y = dc.get_mouse_position()
print(f"鼠标位于: {x}, {y}")
type_text(text, interval=0, wpm=None)以可配置速度输入文本。
参数:
text (str): 要输入的文本interval (float): 按键之间的延迟(0 = 即时)wpm (int, 可选): 每分钟字数(覆盖 interval)示例:
# 即时输入
dc.type_text("Hello World")
# 以 60 WPM 的速度类似人类输入
dc.type_text("Hello World", wpm=60)
# 慢速输入,按键间隔 0.1 秒
dc.type_text("Hello World", interval=0.1)
press(key, presses=1, interval=0.1)按压并释放一个键。
参数:
key (str): 键名(参见键名参考部分)presses (int): 按压次数interval (float): 按压之间的延迟示例:
# 按 Enter
dc.press('enter')
# 按 Space 3 次
dc.press('space', presses=3)
# 按下方向键
dc.press('down')
hotkey(*keys, interval=0.05)执行键盘快捷键。
参数:
*keys (str): 一起按下的键interval (float): 按键之间的延迟示例:
# 复制 (Ctrl+C)
dc.hotkey('ctrl', 'c')
# 粘贴 (Ctrl+V)
dc.hotkey('ctrl', 'v')
# 打开运行对话框 (Win+R)
dc.hotkey('win', 'r')
# 保存 (Ctrl+S)
dc.hotkey('ctrl', 's')
# 全选 (Ctrl+A)
dc.hotkey('ctrl', 'a')
key_down(key) / key_up(key)手动控制按键状态。
示例:
# 按住 Shift
dc.key_down('shift')
dc.type_text("hello") # 输入 "HELLO"
dc.key_up('shift')
# 按住 Ctrl 并点击(用于多选)
dc.key_down('ctrl')
dc.click(100, 100)
dc.click(200, 100)
dc.key_up('ctrl')
screenshot(region=None, filename=None)捕获屏幕或区域。
参数:
region (tuple, 可选): (left, top, width, height) 用于部分捕获filename (str, 可选): 保存图片的路径返回: PIL Image 对象
示例:
# 全屏
img = dc.screenshot()
# 保存到文件
dc.screenshot(filename="screenshot.png")
# 捕获特定区域
img = dc.screenshot(region=(100, 100, 500, 300))
get_pixel_color(x, y)获取坐标处的像素颜色。
返回: RGB 元组 (r, g, b)
示例:
r, g, b = dc.get_pixel_color(500, 300)
print(f"(500, 300) 处的颜色: RGB({r}, {g}, {b})")
find_on_screen(image_path, confidence=0.8)在屏幕上查找图像(需要 OpenCV)。
参数:
image_path (str): 模板图像路径confidence (float): 匹配阈值 (0-1)返回: (x, y, width, height) 或 None
示例:
# 在屏幕上查找按钮
location = dc.find_on_screen("button.png")
if location:
x, y, w, h = location
# 点击找到图像的中心
dc.click(x + w//2, y + h//2)
get_screen_size()获取屏幕分辨率。
返回: (width, height) 元组
示例:
width, height = dc.get_screen_size()
print(f"屏幕: {width}x{height}")
get_all_windows()列出所有打开的窗口。
返回: 窗口标题列表
示例:
windows = dc.get_all_windows()
for title in windows:
print(f"窗口: {title}")
activate_window(title_substring)通过标题将窗口置于最前面。
参数:
title_substring (str): 要匹配的窗口标题的一部分示例:
# 激活 Chrome
dc.activate_window("Chrome")
# 激活 VS Code
dc.activate_window("Visual Studio Code")
get_active_window()获取当前聚焦的窗口。
返回: 窗口标题 (str)
示例:
active = dc.get_active_window()
print(f"活动窗口: {active}")
copy_to_clipboard(text)将文本复制到剪贴板。
示例:
dc.copy_to_clipboard("Hello from OpenClaw!")
get_from_clipboard()从剪贴板获取文本。
返回: str
示例:
text = dc.get_from_clipboard()
print(f"剪贴板: {text}")
'a' 到 'z'
'0' 到 '9'
'f1' 到 'f24'
'enter' / 'return''esc' / 'escape''space' / 'spacebar''tab''backspace''delete' / 'del''insert''home''end''pageup' / 'pgup''pagedown' / 'pgdn''up' / 'down' / 'left' / 'right''ctrl' / 'control''shift''alt''win' / 'winleft' / 'winright''cmd' / 'command' (Mac)'capslock''numlock''scrolllock''.' / ',' / '?' / '!' / ';' / ':''[' / ']' / '{' / '}''(' / ')''+' / '-' / '*' / '/' / '='将鼠标移动到屏幕的任意角落以中止所有自动化。
# 启用故障保护(默认启用)
dc = DesktopController(failsafe=True)
# 暂停所有自动化 2 秒
dc.pause(2.0)
# 检查自动化是否可以安全继续
if dc.is_safe():
dc.click(500, 500)
在执行操作前需要用户确认:
dc = DesktopController(require_approval=True)
# 这将请求确认
dc.click(500, 500) # 提示: "允许在 (500, 500) 点击吗? [y/n]"
dc = DesktopController()
# 点击姓名字段
dc.click(300, 200)
dc.type_text("John Doe", wpm=80)
# Tab 到下一个字段
dc.press('tab')
dc.type_text("john@example.com", wpm=80)
# Tab 到密码
dc.press('tab')
dc.type_text("SecurePassword123", wpm=60)
# 提交表单
dc.press('enter')
# 捕获特定区域
region = (100, 100, 800, 600) # 左, 上, 宽, 高
img = dc.screenshot(region=region)
# 带时间戳保存
import datetime
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
img.save(f"capture_{timestamp}.png")
# 按住 Ctrl 并点击多个文件
dc.key_down('ctrl')
dc.click(100, 200) # 第一个文件
dc.click(100, 250) # 第二个文件
dc.click(100, 300) # 第三个文件
dc.key_up('ctrl')
# 复制选中的文件
dc.hotkey('ctrl', 'c')
# 激活计算器
dc.activate_window("Calculator")
time.sleep(0.5)
# 输入计算
dc.type_text("5+3=", interval=0.2)
time.sleep(0.5)
# 截图结果
dc.screenshot(filename="calculation_result.png")
# 将文件从源位置拖到目标位置
dc.drag(
start_x=200, start_y=300, # 文件位置
end_x=800, end_y=500, # 文件夹位置
duration=1.0 # 平滑 1 秒拖动
)
duration=0get_screen_size() 确认尺寸interval 以提高可靠性DesktopController(failsafe=False)全部安装:
pip install pyautogui pillow opencv-python pygetwindow
为 OpenClaw 构建 - 终极桌面自动化伴侣 🦞