微信_发消息到指定人
通过 Python Win32 UI 自动化,在已登录的微信桌面客户端中向指定联系人发送文字、图片、视频、任意文件。
触发条件
满足以下任意一条即触发本技能:
- 用户消息包含 "发微信"
- 用户消息包含 "给微信的" / "通过微信" / "微信发消息" / "微信发文件" 等自然语言
> ⚠️ 收到指令后直接执行,无需再次确认。
支持的发送类型
| 类型 | 说明 | 参数 |
|---|---|---|
| 文字 | 纯文本消息 | 直接传消息内容 |
| 图片 | jpg/png/bmp/gif/webp | --image <路径> |
| 文件 | zip/xlsx/docx/pdf 等任意文件 | --file <路径> |
| 视频 | mp4/mov/avi 等视频文件 | --file <路径>(与文件相同) |
调用命令
Python 解释器:python(系统 Python,所有依赖已就绪)
> 以下命令中 wechat_send.py 位于本技能目录下,WorkBuddy 会自动解析路径。
发文字:
python "<技能目录>/wechat_send.py" "<联系人>" "<消息内容>"
发图片:
python "<技能目录>/wechat_send.py" "<联系人>" "" --image "<图片路径>"
发图片+说明文字:
python "<技能目录>/wechat_send.py" "<联系人>" "<说明文字>" --image "<图片路径>"
发文件(zip/xlsx/docx/pdf等):
python "<技能目录>/wechat_send.py" "<联系人>" "" --file "<文件路径>"
发视频(mp4/mov等):
python "<技能目录>/wechat_send.py" "<联系人>" "" --file "<视频路径>"
消息含特殊字符(从文件读取):
python "<技能目录>/wechat_send.py" "<联系人>" "" --msgfile <临时文件路径>
调试模式(截图保存到桌面):
python "<技能目录>/wechat_send.py" "<联系人>" "<消息>" --screenshot
执行流程
- 检测微信登录状态:枚举窗口查找标题"微信",未找到直接报错退出
- 激活微信窗口:
Ctrl+Alt+W热键唤醒;若窗口在托盘(坐标-32000),自动 SW_RESTORE 强制还原 - 最大化:坐标恢复后
ShowWindow(SW_MAXIMIZE),等待渲染稳定 - Ctrl+F 搜索联系人:剪贴板粘贴联系人名,回车打开聊天
- 点击聊天输入框:坐标定位(右侧聊天区,距底边 95px)
- 粘贴内容:
- 文字 →pyperclip.copy()+ Ctrl+V
- 图片 → PowerShellSetImage+ Ctrl+V
- 文件/视频 → PowerShellSetFileDropList+ Ctrl+V - 点击发送按钮:坐标(距右边 60px,距底边 30px)
- 收尾:清空剪贴板,Ctrl+W 关闭聊天,最小化微信
返回结果说明
[OK] 完成→ 执行成功,内容已发出[失败] 未找到微信窗口→ 微信未启动或未登录[FAIL] 失败→ 其他执行错误
技术实现
- 激活方案:
Ctrl+Alt+W热键(微信自注册) + 失败时 SW_RESTORE 兜底,均等待坐标恢复后再继续 - DPI 自适应:对比物理分辨率与 pyautogui 逻辑分辨率,自动计算缩放比
- 最大化阴影修正:最大化时改用工作区坐标,避免 Qt 窗口阴影偏移
- 图片粘贴:PowerShell
System.Drawing.Image+Clipboard.SetImage,支持 jpg/png/bmp/gif - 文件/视频粘贴:PowerShell
StringCollection+Clipboard.SetFileDropList,支持任意文件类型 - 剪贴板安全:发送完成后自动清空剪贴板,避免敏感内容残留
- HWND 缓存:缓存在
.wechat_hwnd_cache,重启微信后自动刷新 - 微信 UI 布局:功能栏(56px) + 会话列表(230px) + 聊天区,输入框距底边约 95px,发送按钮距右边 60px、距底边 30px
环境要求
- Windows 操作系统
- 微信 PC 版已安装并保持登录状态
- Python 3.x(系统
python命令可用) - 依赖包:
pyautogui、pywin32、pyperclip、Pillow(opencv-python/numpy 可选,仅用于截图调试)
安装依赖:
pip install pyautogui pywin32 pyperclip Pillow
错误排查
| 现象 | 原因 | 解决 |
|---|---|---|
未找到微信窗口 |
微信未运行或未登录 | 启动微信并登录后重试 |
| 坐标循环卡在 -32000 | 热键被占用 / 微信版本不支持 | 已自动 SW_RESTORE 兜底 |
| 消息发到了错误的人 | 搜索匹配到其他联系人或群聊 | 使用完整姓名,加 --screenshot 调试 |
| 文件发送后未出现预览 | 微信版本限制或文件过大 | 确认文件大小,查看微信是否弹出确认框 |
| 视频发送后提示格式不支持 | 微信不支持该视频编码 | 转码为 H.264 mp4 后重试 |