后台模式
后台模式通过 SendMessage 发送虚拟鼠标/键盘消息实现 UI 自动化,无需微信窗口处于前台,不会干扰用户正常操作。
启用后台模式
python
from pywxauto import Weixin
wx = Weixin(background=True)工作原理
| 操作类型 | 前台模式 | 后台模式 |
|---|---|---|
| 鼠标点击 | uiautomation Click | SendMessage WM_LBUTTONDOWN/UP |
| 键盘输入 | uiautomation SendKeys | SendMessage WM_CHAR/WM_KEYDOWN |
| 文本粘贴 | 剪贴板 Ctrl+V | 右键菜单粘贴 |
| 窗口激活 | SetActive + SetFocus | WM_ACTIVATE |
| 截图 | BitBlt(需窗口可见) | PrintWindow(支持后台) |
offscreen 参数
后台模式下,窗口可以移到屏幕外避免视觉干扰:
python
# 窗口移到屏幕外(默认行为)
wx = Weixin(background=True, offscreen=True)
# 窗口保持原位(后台操作但窗口仍可见)
wx = Weixin(background=True, offscreen=False)offscreen=True 时:
- 微信主窗口移到屏幕外(坐标 -9999, -9999)
- 独立聊天窗口、朋友圈窗口等弹窗也会自动移到屏幕外
- 程序退出时自动将所有窗口移回原位
手动控制窗口位置
python
# 移到屏幕外
wx.move_offscreen()
# 移回原位
wx.move_back()
# 检查是否在屏幕外
print(wx.is_offscreen)后台模式的限制
组合键:
Ctrl+A、Ctrl+C等组合键无法通过WM_KEYDOWN可靠模拟,这些操作会临时使用auto.SendKeys(可能短暂激活窗口)右键菜单粘贴:后台模式下文本输入通过右键菜单的"粘贴"实现,比前台模式的
Ctrl+V慢一些Chrome 内核窗口:笔记编辑器等 Chrome 内核窗口在屏幕外时可能不完全加载子控件,pywxauto 会自动处理(先在屏幕内等加载完成再移到屏幕外)
适用场景
- 服务器端 24/7 运行的聊天机器人
- 远程桌面环境下的自动化任务
- 不希望干扰用户操作的后台消息处理
- 多微信实例并行运行
示例:后台监听机器人
python
from pywxauto import Weixin, Event
# 后台模式 + 窗口移到屏幕外
wx = Weixin(background=True, offscreen=True)
@wx.on(Event.TEXT)
def on_text(weixin, chat, message):
if message.source.value == "others":
chat.send_text("收到!")
wx.add_chat_listen(["客服群"])
wx.run()