← 返回
未分类

微信 PC 端 Claw 自动操作

打开微信桌面端,向指定联系人发送消息、图片、文件等内容。触发词:给某人发微信、打开微信发消息、微信发送、通过微信发给。也支持被其他 Skill 调用,实现自动化推送。
打开微信桌面端,向指定联系人发送消息、图片、文件等内容。触发词:给某人发微信、打开微信发消息、微信发送、通过微信发给。也支持被其他 Skill 调用,实现自动化推送。
微光浮影
未分类 community v1.0.2 3 版本 100000 Key: 无需
★ 1
Stars
📥 306
下载
💾 28
安装
3
版本
#latest

概述

微信 PC 端自动控制 v1.0.1

通过 pywinauto 自动化操作微信 Windows 桌面端,实现消息/图片/文件的自动发送。

本 Skill 完全开源,源代码公开。

更新日志 v1.0.1

  • 🔓 源代码完全公开,MIT 协议
  • 添加 LICENSE 文件
  • 添加 README.md(含完整源码说明)
  • SKILL.md 补充 homepage / license / tags 字段
  • 修复:脚本编码声明修正为完整 emacs 格式

功能

  • 打开微信桌面端(如未运行则自动启动)
  • 搜索并定位联系人(支持群聊)
  • 发送文本消息(支持长文本从文件读取)
  • 发送图片(通过剪贴板 BMP 格式)
  • 发送文件(通过 Ctrl+Alt+F 快捷键)

环境要求

  • Windows 系统
  • 微信桌面端已安装
  • Python3.7+
  • 依赖库:pywinauto, pyperclip, pillow, pywin32

安装依赖

pip install pywinauto pyperclip pillow pywin32

微信路径配置

默认路径:D:\Tencent\WeChat\WeChat.exe

用户实际安装路径可能为 D:\Tencent\WeiXin\WeiXin.exe(注意拼写是 WeiXin 不是 WeChat)。

修改脚本第 33 行 WECHAT_PATH 变量即可适配你的安装路径。

使用方式

命令行直接调用

# 发送文本
python scripts/wechat_send.py --contact "微光浮影" --message "你好,这是自动发送的消息"

# 从文件读取长文本发送
python scripts/wechat_send.py --contact "微光浮影" --message-file "report.txt"

# 发送图片
python scripts/wechat_send.py --contact "微光浮影" --image "C:\path\to\image.png"

# 发送文件
python scripts/wechat_send.py --contact "微光浮影" --file "C:\path\to\file.pdf"

# 仅启动微信
python scripts/wechat_send.py --launch-only

被其他 Skill 调用

其他 Skill 可以通过以下方式调用本 Skill 发送消息:

import subprocess
subprocess.run([
    "python",
    "scripts/wechat_send.py",
    "--contact", "微光浮影",
    "--message", "消息内容"
])

技术说明

窗口连接

使用 pywinautouia 后端连接微信窗口,窗口标题必须为"微信"(不是 "WeChat")。

app = Application(backend='uia').connect(title_re="微信", timeout=10)
window = app.window(title_re="微信")

中文输入

所有文本输入均通过 剪贴板 + Ctrl+V 实现,避免 pywinauto 直接键入中文的编码问题。

pyperclip.copy(text)
send_keys("^v")  # Ctrl+V 粘贴

图片发送原理

将图片转为 BMP 格式(去掉文件头 14 字节,取 DIB 数据),直接写入 Windows 剪贴板 CF_DIB 格式,在聊天框 Ctrl+V 粘贴即发送。

# 详见 scripts/wechat_send.py send_image() 函数
win32clipboard.SetClipboardData(win32con.CF_DIB, data)

发送快捷键

  • 发送消息:Enter 键(微信默认设置)
  • 打开搜索:Ctrl+F
  • 打开文件选择:Ctrl+Alt+F

限制与注意事项

  1. 微信窗口必须可见:自动化需要窗口在前台,不能最小化到托盘
  2. 登录状态:通常自动登录,偶尔需要扫码(脚本会提示)
  3. 联系人名称:必须精确匹配搜索结果第一名
  4. UI 依赖:依赖微信 Windows 版 UI 结构,微信版本更新可能导致失效
  5. 不能读取消息:本 Skill 只发送,不读取微信消息内容

源代码结构

wechat-desktop/
├── SKILL.md              # Skill 定义文件(本文件)
├── scripts/
│   └── wechat_send.py    # 核心自动化脚本(完整源码见下方)
├── LICENSE               # MIT 开源协议
└── README.md            # 说明文档

完整源码

scripts/wechat_send.py

> 完整源码已随 Skill 打包,路径:scripts/wechat_send.py

(源码内容较长,见 scripts/wechat_send.py 文件)

报告问题

SkillHub 评论区:https://skillhub.cn/skills/wechat-desktop-claw-automatic-control

版本历史

共 3 个版本

  • v1.0.2 Update:由于此 Skill 在发布 1.0.0 版本时,在安全检查过程中被判定具有潜在风险,因此我们决定将原代码公开: 中文输入 所有文本输入均通过 剪贴板 + Ctrl+V 实现,避免 pywinauto 直接键入中文的编码问题。 pyperclip.copy(text) send_keys("^v") # Ctrl+V 粘贴 图片发送原理 将图片转为 BMP 格式(去掉文件头 14 字节,取 DIB 数据),直接写入 Windows 剪贴板 CF_DIB 格式,在聊天框 Ctrl+V 粘贴即发送。 # 详见 scripts/wechat_send.py send_image() 函数 win32clipboard.SetClipboardData(win32con.CF_DIB, data) 发送快捷键 发送消息:Enter 键(微信默认设置) 打开搜索:Ctrl+F 打开文件选择:Ctrl+Alt+F 限制与注意事项 微信窗口必须可见:自动化需要窗口在前台,不能最小化到托盘 登录状态:通常自动登录,偶尔需要扫码(脚本会提示) 联系人名称:必须精确匹配搜索结果第一名 UI 依赖:依赖微信 Windows 版 UI 结构,微信版本更新可能导致失效 不能读取消息:本 Skill 只发送,不读取微信消息内容 源代码结构 wechat-desktop/ ├── SKILL.md # Skill 定义文件(本文件) ├── scripts/ │ └── wechat_send.py # 核心自动化脚本(完整源码见下方) ├── LICENSE # MIT 开源协议 └── README.md # 说明文档 完整源码 scripts/wechat_send.py 完整源码已随 Skill 打包,路径:scripts/wechat_send.py (源码内容较长,见 scripts/wechat_send.py 文件) 报告问题 SkillHub 评论区:https://skillhub.cn/skills/wechat-desktop-claw-automatic-control #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 微信桌面端自动化脚本 功能:打开微信、搜索联系人、发送消息/图片/文件 依赖:pywinauto, pyperclip, pywin32 微信路径:D:/Tencent/Weixin/Weixin.exe(注意:是 Weixin 不是 WeChat) 发送方式:Enter 键发送 版本:1.0.1 开源地址:https://github.com/weiguangfuyin/wechat-pc-automation """ import sys import io import time import subprocess import argparse from pathlib import Path # 设置 stdout 为 UTF-8 编码,避免 Windows 控制台 GBK 编码错误 sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8') try: from pywinauto import Application from pywinauto.keyboard import send_keys import pyperclip except ImportError as e: print(f"缺少依赖库:{e}") print("请运行:pip install pywinauto pyperclip") sys.exit(1) WECHAT_PATH = "D:/Tencent/Weixin/Weixin.exe" TIMEOUT = 15 def launch_wechat(): """启动微信,如果已运行则连接""" # 先尝试连接已运行的微信 try: app = Application(backend='uia').connect(title_re="微信", timeout=2) print("微信已在运行,直接连接") return app except Exception: pass # 启动微信 print("启动微信...") subprocess.Popen(WECHAT_PATH) time.sleep(6) # 等待微信窗口出现 deadline = time.time() + TIMEOUT while time.time() < deadline: try: app = Application(backend='uia').connect(title_re="微信", timeout=2) print("微信启动成功") return app except Exception: time.sleep(1) print("无法连接微信,可能需要在手机上扫码确认登录") print("请扫码后重新运行脚本") sys.exit(1) def get_main_window(app): """获取微信主窗口(确保是可见的前台窗口)""" try: window = app.window(title_re="微信") # 确保窗口可见且激活 if not window.is_visible(): print("警告:微信窗口不可见,尝试显示窗口") window.restore() # 如果最小化,恢复窗口 time.sleep(0.5) window.set_focus() time.sleep(0.5) # 确认窗口已激活 if window.is_active(): print("✅ 微信窗口已激活") else: print("⚠️ 警告:微信窗口可能未在前台") return window except Exception as e: print(f"获取窗口失败:{e}") sys.exit(1) def search_contact(window, name): """搜索并选中联系人""" print(f"搜索联系人:{name}") # Ctrl+F 打开搜索 send_keys("^f") time.sleep(1) # 输入联系人名称 pyperclip.copy(name) time.sleep(0.2) send_keys("^v") time.sleep(1.5) # 按 Enter 选中第一个搜索结果 send_keys("{ENTER}") time.sleep(1) print(f"已选中联系人:{name}") def send_text(window, text): """发送文本消息(Enter 发送)""" print(f"发送文本:{text[:60]}{'...' if len(text) > 60 else ''}") pyperclip.copy(text) time.sleep(0.2) send_keys("^v") # 粘贴 time.sleep(0.3) send_keys("{ENTER}") # Enter 发送 time.sleep(0.5) print("文本已发送") def send_image(window, image_path): """发送图片(通过剪贴板 + Ctrl+V 粘贴到聊天框)""" import win32clipboard import win32con from PIL import Image print(f"发送图片:{image_path}") if not Path(image_path).exists(): print(f"图片不存在:{image_path}") return False try: img = Image.open(image_path) output = io.BytesIO() img.convert("RGB").save(output, "BMP") data = output.getvalue()[14:] # 去掉 BMP 文件头 win32clipboard.OpenClipboard() win32clipboard.EmptyClipboard() win32clipboard.SetClipboardData(win32con.CF_DIB, data) win32clipboard.CloseClipboard() time.sleep(0.3) send_keys("^v") # Ctrl+V 粘贴图片 time.sleep(1) send_keys("{ENTER}") # Enter 发送 print("图片已发送") return True except Exception as e: print(f"发送图片失败:{e}") print("请确保安装了 pywin32:pip install pywin32") return False def send_file(window, file_path): """发送文件(通过 Ctrl+Alt+F 快捷键)""" print(f"发送文件:{file_path}") if not Path(file_path).exists(): print(f"文件不存在:{file_path}") return False try: # 尝试 Ctrl+Alt+F(微信发送文件快捷键) send_keys("^%f") # Ctrl+Alt+F time.sleep(1.5) # 此时应出现文件选择对话框,输入文件路径 pyperclip.copy(str(file_path)) time.sleep(0.2) send_keys("^v") time.sleep(0.5) send_keys("{ENTER}") time.sleep(1) print("文件已发送") return True except Exception as e: print(f"发送文件失败:{e}") return False def main(): parser = argparse.ArgumentParser(description="微信桌面端自动化工具") parser.add_argument("--contact", help="联系人名称(昵称或备注名)") parser.add_argument("--message", help="要发送的文本内容") parser.add_argument("--message-file", help="从文件读取要发送的文本内容(适用于长消息)") parser.add_argument("--image", help="要发送的图片路径") parser.add_argument("--file", help="要发送的文件路径") parser.add_argument("--launch-only", action="store_true", help="仅启动微信,不发送内容") args = parser.parse_args() # 启动/连接微信 app = launch_wechat() window = get_main_window(app) if args.launch_only: print("微信已启动,可以开始使用了") return if not args.contact: print("请指定 --contact 参数(联系人名称)") sys.exit(1) # 搜索并选中联系人 search_contact(window, args.contact) # 发送内容 if args.message_file: # 从文件读取消息内容 try: with open(args.message_file, 'r', encoding='utf-8') as f: message = f.read() print(f"从文件读取消息:{args.message_file} ({len(message)} 字符)") send_text(window, message) except Exception as e: print(f"读取消息文件失败:{e}") sys.exit(1) elif args.message: send_text(window, args.message) if args.image: send_image(window, args.image) if args.file: send_file(window, args.file) if not any([args.message, args.message_file, args.image, args.file]): print("未指定要发送的内容,请使用 --message / --message-file / --image / --file 参数") if __name__ == "__main__": main() 这个 Skill 是我使用 WorkBuddy 制作的,虽然目前只是一些相关必备的功能,但考虑到大家也有可能需要,我决定将其上传到 SkillHub。 希望大家可以动用自己手头上的工作,让这个 Skill 变得更好。如果有必要的话,我们会将其开源~ 当前
    2026-04-27 11:58 安全 安全
  • v1.0.1 Update:由于此 Skill 在发布 1.0.0 版本时,在安全检查过程中被判定具有潜在风险,因此我们决定将原代码公开:--- name: 微信 PC 端自动控制 description: 打开微信桌面端,向指定联系人发送消息、图片、文件等内容。触发词:给某人发微信、打开微信发消息、微信发送、通过微信发给。也支持被其他 Skill 调用,实现自动化推送。 version: 1.0.1 author: 微光浮影 homepage: https://github.com/weiguangfuyin/wechat-pc-automation license: MIT tags: [wechat, automation, pywinauto, windows] --- # 微信 PC 端自动控制 v1.0.1 通过 `pywinauto` 自动化操作微信 Windows 桌面端,实现消息/图片/文件的自动发送。 **本 Skill 完全开源,源代码公开。** ## 更新日志 v1.0.1 - 🔓 **源代码完全公开**,MIT 协议 - 添加 LICENSE 文件 - 添加 README.md(含完整源码说明) - SKILL.md 补充 homepage / license / tags 字段 - 修复:脚本编码声明修正为完整 emacs 格式 (以下与之前内容相同,此处略) #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 微信桌面端自动化脚本 功能:打开微信、搜索联系人、发送消息/图片/文件 依赖:pywinauto, pyperclip, pywin32 微信路径:D:/Tencent/Weixin/Weixin.exe(注意:是 Weixin 不是 WeChat) 发送方式:Enter 键发送 版本:1.0.1 开源地址:https://github.com/weiguangfuyin/wechat-pc-automation """ import sys import io import time import subprocess import argparse from pathlib import Path # 设置 stdout 为 UTF-8 编码,避免 Windows 控制台 GBK 编码错误 sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8') try: from pywinauto import Application from pywinauto.keyboard import send_keys import pyperclip except ImportError as e: print(f"缺少依赖库:{e}") print("请运行:pip install pywinauto pyperclip") sys.exit(1) WECHAT_PATH = "D:/Tencent/Weixin/Weixin.exe" TIMEOUT = 15 def launch_wechat(): """启动微信,如果已运行则连接""" # 先尝试连接已运行的微信 try: app = Application(backend='uia').connect(title_re="微信", timeout=2) print("微信已在运行,直接连接") return app except Exception: pass # 启动微信 print("启动微信...") subprocess.Popen(WECHAT_PATH) time.sleep(6) # 等待微信窗口出现 deadline = time.time() + TIMEOUT while time.time() < deadline: try: app = Application(backend='uia').connect(title_re="微信", timeout=2) print("微信启动成功") return app except Exception: time.sleep(1) print("无法连接微信,可能需要在手机上扫码确认登录") print("请扫码后重新运行脚本") sys.exit(1) def get_main_window(app): """获取微信主窗口(确保是可见的前台窗口)""" try: window = app.window(title_re="微信") # 确保窗口可见且激活 if not window.is_visible(): print("警告:微信窗口不可见,尝试显示窗口") window.restore() # 如果最小化,恢复窗口 time.sleep(0.5) window.set_focus() time.sleep(0.5) # 确认窗口已激活 if window.is_active(): print("✅ 微信窗口已激活") else: print("⚠️ 警告:微信窗口可能未在前台") return window except Exception as e: print(f"获取窗口失败:{e}") sys.exit(1) def search_contact(window, name): """搜索并选中联系人""" print(f"搜索联系人:{name}") # Ctrl+F 打开搜索 send_keys("^f") time.sleep(1) # 输入联系人名称 pyperclip.copy(name) time.sleep(0.2) send_keys("^v") time.sleep(1.5) # 按 Enter 选中第一个搜索结果 send_keys("{ENTER}") time.sleep(1) print(f"已选中联系人:{name}") def send_text(window, text): """发送文本消息(Enter 发送)""" print(f"发送文本:{text[:60]}{'...' if len(text) > 60 else ''}") pyperclip.copy(text) time.sleep(0.2) send_keys("^v") # 粘贴 time.sleep(0.3) send_keys("{ENTER}") # Enter 发送 time.sleep(0.5) print("文本已发送") def send_image(window, image_path): """发送图片(通过剪贴板 + Ctrl+V 粘贴到聊天框)""" import win32clipboard import win32con from PIL import Image print(f"发送图片:{image_path}") if not Path(image_path).exists(): print(f"图片不存在:{image_path}") return False try: img = Image.open(image_path) output = io.BytesIO() img.convert("RGB").save(output, "BMP") data = output.getvalue()[14:] # 去掉 BMP 文件头 win32clipboard.OpenClipboard() win32clipboard.EmptyClipboard() win32clipboard.SetClipboardData(win32con.CF_DIB, data) win32clipboard.CloseClipboard() time.sleep(0.3) send_keys("^v") # Ctrl+V 粘贴图片 time.sleep(1) send_keys("{ENTER}") # Enter 发送 print("图片已发送") return True except Exception as e: print(f"发送图片失败:{e}") print("请确保安装了 pywin32:pip install pywin32") return False def send_file(window, file_path): """发送文件(通过 Ctrl+Alt+F 快捷键)""" print(f"发送文件:{file_path}") if not Path(file_path).exists(): print(f"文件不存在:{file_path}") return False try: # 尝试 Ctrl+Alt+F(微信发送文件快捷键) send_keys("^%f") # Ctrl+Alt+F time.sleep(1.5) # 此时应出现文件选择对话框,输入文件路径 pyperclip.copy(str(file_path)) time.sleep(0.2) send_keys("^v") time.sleep(0.5) send_keys("{ENTER}") time.sleep(1) print("文件已发送") return True except Exception as e: print(f"发送文件失败:{e}") return False def main(): parser = argparse.ArgumentParser(description="微信桌面端自动化工具") parser.add_argument("--contact", help="联系人名称(昵称或备注名)") parser.add_argument("--message", help="要发送的文本内容") parser.add_argument("--message-file", help="从文件读取要发送的文本内容(适用于长消息)") parser.add_argument("--image", help="要发送的图片路径") parser.add_argument("--file", help="要发送的文件路径") parser.add_argument("--launch-only", action="store_true", help="仅启动微信,不发送内容") args = parser.parse_args() # 启动/连接微信 app = launch_wechat() window = get_main_window(app) if args.launch_only: print("微信已启动,可以开始使用了") return if not args.contact: print("请指定 --contact 参数(联系人名称)") sys.exit(1) # 搜索并选中联系人 search_contact(window, args.contact) # 发送内容 if args.message_file: # 从文件读取消息内容 try: with open(args.message_file, 'r', encoding='utf-8') as f: message = f.read() print(f"从文件读取消息:{args.message_file} ({len(message)} 字符)") send_text(window, message) except Exception as e: print(f"读取消息文件失败:{e}") sys.exit(1) elif args.message: send_text(window, args.message) if args.image: send_image(window, args.image) if args.file: send_file(window, args.file) if not any([args.message, args.message_file, args.image, args.file]): print("未指定要发送的内容,请使用 --message / --message-file / --image / --file 参数") if __name__ == "__main__": main() 这个 Skill 是我使用 WorkBuddy 制作的,虽然目前只是一些相关必备的功能,但考虑到大家也有可能需要,我决定将其上传到 SkillHub。 希望大家可以动用自己手头上的工作,让这个 Skill 变得更好。如果有必要的话,我们会将其开源~
    2026-04-27 10:52 安全
  • v1.0.0 Upgrade:打开微信桌面端,向指定联系人发送消息、图片、文件等内容。触发词:给某人发微信、打开微信发消息、微信发送、通过微信发给。也支持被其他 Skill 调用,实现自动化推送。
    2026-04-27 10:31 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

ai-intelligence

Self-Improving + Proactive Agent

ivangdavila
自我反思+自我批评+自我学习+自组织记忆。智能体评估自身工作、发现错误并持续改进。
★ 1,349 📥 317,694
security-compliance

Skill Vetter

spclaudehome
AI智能体技能安全预审工具。安装ClawdHub、GitHub等来源技能前,检查风险信号、权限范围及可疑模式。
★ 1,210 📥 266,143
developer-tools

Github

steipete
使用 `gh` CLI 与 GitHub 交互,通过 `gh issue`、`gh pr`、`gh run` 和 `gh api` 管理议题、PR、CI 运行及高级查询。
★ 666 📥 323,784