Skip to content

后台模式

后台模式通过 SendMessage 发送虚拟鼠标/键盘消息实现 UI 自动化,无需微信窗口处于前台,不会干扰用户正常操作。

启用后台模式

python
from pywxauto import Weixin

wx = Weixin(background=True)

工作原理

操作类型前台模式后台模式
鼠标点击uiautomation ClickSendMessage WM_LBUTTONDOWN/UP
键盘输入uiautomation SendKeysSendMessage WM_CHAR/WM_KEYDOWN
文本粘贴剪贴板 Ctrl+V右键菜单粘贴
窗口激活SetActive + SetFocusWM_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)

后台模式的限制

  1. 组合键Ctrl+ACtrl+C 等组合键无法通过 WM_KEYDOWN 可靠模拟,这些操作会临时使用 auto.SendKeys(可能短暂激活窗口)

  2. 右键菜单粘贴:后台模式下文本输入通过右键菜单的"粘贴"实现,比前台模式的 Ctrl+V 慢一些

  3. 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()