Pywayne Gui:Windows 桌面自动化与全局热键 - Openclaw Skills

作者:互联网

2026-03-30

AI教程

什么是 Pywayne Gui?

Pywayne Gui 是专为 Windows 操作系统设计的专业自动化框架,为桌面交互提供了流线型接口。作为 Openclaw Skills 集合中的核心条目,它通过提供与 Windows UI 的深度集成,允许开发人员超越标准的脚本执行。该技能擅长两项主要任务:全系统范围的键盘事件和程序化窗口操作,使其成为构建桌面宏和自动化工作流的必备工具。

通过利用 pywin32 和 pyautogui 等底层库,Pywayne Gui 简化了复杂的 Win32 API 交互。开发人员可以使用关键字搜索快速找到特定的应用程序窗口,调整其状态(最大化、置顶或关闭),甚至修改标题等窗口元数据。这使得它在创建需要对用户输入做出反应的自定义生产力工具时非常有效,无论当前聚焦的是哪个应用程序。

下载入口:https://github.com/openclaw/skills/tree/main/skills/wangyendt/gui

安装与下载

1. ClawHub CLI

从源直接安装技能的最快方式。

npx clawhub@latest install gui

2. 手动安装

将技能文件夹复制到以下位置之一

全局模式 ~/.openclaw/skills/ 工作区 /skills/

优先级:工作区 > 本地 > 内置

3. 提示词安装

将此提示词复制到 OpenClaw 即可自动安装。

请帮我使用 Clawhub 安装 gui。如果尚未安装 Clawhub,请先安装(npm i -g clawhub)。

Pywayne Gui 应用场景

  • 创建自定义全局快捷键以触发特定的 Python 自动化脚本。
  • 自动排列和管理多个桌面应用程序窗口的状态。
  • 构建后台坚控程序,针对特定的键盘组合进行屏幕截取或数据记录。
  • 通过操作窗口句柄和子元素,控制缺乏原生 API 的传统 Windows 应用程序。
Pywayne Gui 工作原理
  1. 用户初始化 GlobalHotKeys 或 GuiOperation 类以与 Windows 子系统交互。
  2. 使用装饰器或直接的方法调用注册全局热键,将虚拟键和修饰键映射到特定的回调函数。
  3. 应用程序进入循环,以截获整个操作系统环境中的系统级键盘消息。
  4. 对于窗口管理,该技能会扫描活动进程,以识别与用户定义的标题关键字匹配的窗口句柄 (HWND)。
  5. 获取句柄后,该技能向 Windows API 发送命令以修改窗口属性、尺寸或可见性。

Pywayne Gui 配置指南

此技能需要 Windows 环境和若干 Python 依赖项。使用以下命令安装核心需求:

pip install pywin32 pyuserinput pyautogui

确保您的终端或 IDE 具有全局输入和操作其他应用程序窗口所需的权限。

Pywayne Gui 数据架构与分类体系

该技能通过窗口句柄和坐标系统组织桌面数据,详情如下:

数据类型 描述 结构
窗口句柄 Windows 对象的唯一 ID 整数 (HWND)
窗口矩形 屏幕上的空间坐标 (左, 上, 右, 下)
窗口属性 已识别窗口的元数据 (标题字符串, 类名)
修饰键 系统按键常量 MOD_ALT, MOD_CTRL, MOD_SHIFT, MOD_WIN
虚拟键 系统级键盘代码 VK_A 到 VK_Z, VK_F1 到 VK_F12
name: pywayne-gui
description: Windows GUI automation toolkit for global hotkeys and window management. Use when users need to register global hotkeys, find/control windows, automate GUI operations, or perform Windows desktop automation. Requires Windows OS with pywin32, pyuserinput, and pyautogui dependencies.

Pywayne Gui

Windows 图形用户界面自动化工具,提供全局热键和窗口操作功能。

Quick Start

from pywayne.gui import GlobalHotKeys, GuiOperation

# 全局热键
g = GlobalHotKeys()

@g.register(GlobalHotKeys.VK_F1, GlobalHotKeys.MOD_SHIFT)
def shift_f1():
    print('Shift+F1 被按下')

# 启动(按 Q 或 Ctrl+C 退出)
GlobalHotKeys.listen()

Dependencies

用途 安装命令
pywin32 Windows API 封装 pip install pywin32
pyuserinput 键盘鼠标输入 pip install pyuserinput
pyautogui GUI 自动化 pip install pyautogui

GlobalHotKeys - 全局热键

注册全局热键,在全局范围内键盘事件。

注册热键

from pywayne.gui import GlobalHotKeys

g = GlobalHotKeys()

# 装饰器方式注册
@g.register(GlobalHotKeys.VK_F1, GlobalHotKeys.MOD_SHIFT)
def shift_f1():
    print('Shift+F1')

# 组合键修饰符(支持组合使用)
g.register(GlobalHotKeys.VK_F1, GlobalHotKeys.MOD_CTRL | GlobalHotKeys.MOD_SHIFT)

# 直接调用 register 方法
def handler():
    print('Ctrl+A 被按下')
GlobalHotKeys.register(GlobalHotKeys.VK_A, GlobalHotKeys.MOD_CTRL, handler)

启动

# 启动消息循环,开始热键
GlobalHotKeys.listen()

停止条件

按以下任意组合键会停止循环:

  • Q
  • Ctrl + C

虚拟键码

常用虚拟键码VK_*):

按键 键码 组合键
A-Z VK_AVK_Z ord('A')ord('Z')
0-9 VK_0VK_9 ord('0')ord('9')
F1-F12 VK_F1VK_F12 -

修饰键MOD_*):

修饰键 常量
Alt MOD_ALT
Ctrl MOD_CTRL
Shift MOD_SHIFT
Win MOD_WIN

修饰键可使用 | 组合,如 MOD_CTRL | MOD_SHIFT

GuiOperation - 窗口操作

提供 Windows 窗口查找、控制和操作功能。

初始化

from pywayne.gui import GuiOperation

gui = GuiOperation()

find_window

查找包含指定关键字的窗口,返回窗口句柄列表。

# 查找包含"记事本"的窗口
notepad_handles = gui.find_window('记事本')

# 查找包含"微信"的窗口
wech@t_handles = gui.find_window('微信')

# 多关键字匹配
handles = gui.find_window('Visual', 'Studio')

参数说明

  • *keys: 按关键字匹配窗口标题

返回值

  • 匹配的窗口句柄列表(hwnd
  • 未找到时返回空列表

get_windows_attr

获取指定窗口的属性信息。

hwnd = gui.find_window('记事本')[0]
title, class_name = gui.get_windows_attr(hwnd)
print(f"窗口标题: {title}")
print(f"窗口类名: {class_name}")

返回值

  • 找到窗口:(窗口标题, 窗口类名)
  • 窗口不存在:('', '')

maximize_window

将指定窗口最大化。

hwnd = gui.find_window('记事本')[0]
gui.maximize_window(hwnd)

bring_to_top

将指定窗口置于顶层。

hwnd = gui.find_window('记事本')[0]
gui.bring_to_top(hwnd)

close_window

关闭指定窗口。

hwnd = gui.find_window('记事本')[0]
gui.close_window(hwnd)

change_window_name

修改指定窗口的标题。

hwnd = gui.find_window('记事本')[0]
gui.change_window_name(hwnd, '新标题')

get_window_rect

获取窗口的矩形坐标。

hwnd = gui.find_window('记事本')[0]
rect = gui.get_window_rect(hwnd)
print(f"窗口位置: {rect}")

返回值(left, top, right, bottom)

get_child_windows

获取指定窗口的子窗口列表。

hwnd = gui.find_window('记事本')[0]
children = gui.get_child_windows(hwnd)
print(f"子窗口数量: {len(children)}")

使用示例

示例 1:热键自动化

from pywayne.gui import GlobalHotKeys

g = GlobalHotKeys()

@g.register(GlobalHotKeys.VK_F10, GlobalHotKeys.MOD_SHIFT)
def screenshot_hotkey():
    print('截图热键被触发')
    # 执行截图逻辑...

@g.register(GlobalHotKeys.VK_Q, GlobalHotKeys.MOD_CTRL)
def copy_hotkey():
    print('复制热键被触发')
    # 执行复制逻辑...

GlobalHotKeys.listen()

示例 2:窗口自动化

from pywayne.gui import GuiOperation
import time

gui = GuiOperation()

# 查找记事本窗口
notepad = gui.find_window('记事本')
if notepad:
    print('未找到记事本')
    exit()

# 置顶并最大化
gui.bring_to_top(notepad[0])
time.sleep(0.5)
gui.maximize_window(notepad[0])

# 修改窗口标题
gui.change_window_name(notepad[0], '自动化控制中...')

示例 3:综合自动化

from pywayne.gui import GuiOperation, GlobalHotKeys
from pywayne.gui import PyMouse, PyKeyboard

gui = GuiOperation()
g = GlobalHotKeys()

@g.register(GlobalHotKeys.VK_F1, GlobalHotKeys.MOD_SHIFT)
def auto_test():
    # 查找测试软件窗口
    st_window = gui.find_window('ST测试软件')
    if not st_window:
        return

    st_hwnd = st_window[0]
    gui.bring_to_top(st_hwnd)

    # 获取子窗口
    for child in gui.get_child_windows(st_hwnd):
        title, cls = gui.get_windows_attr(child)
        print(f'子窗口: {title}')

    # 操作完成后关闭
    gui.close_window(st_hwnd)

GlobalHotKeys.listen()

注意事项

  1. 平台限制: 本模块仅支持 Windows 系统
  2. 依赖安装: 使用前需确保已安装 pywin32、pyuserinput、pyautogui
  3. 管理员权限: 某些操作可能需要管理员权限
  4. 窗口状态: 查找和操作仅对可见且启用的窗口有效
  5. 热键冲突: 注册的热键可能与其他软件冲突