Skip to content

WeixinManager

多客户端管理器,统一管理多个微信实例。所有 Weixin 上的方法都可通过 PID 路由调用。

构造方法

python
WeixinManager(
    background=False,
    offscreen=True,
    idle_wait=0,
    lock_input=False,
    resize=False,
    ocr="wcocr",
    wxocr_weixin_install_path=None,
    wxocr_plugin_path=None,
)

构造时自动调用 connect_all() 连接所有已运行的微信客户端。

属性

属性类型说明
pidsList[int]所有已连接的 PID 列表
instancesDict[int, Weixin]{pid: Weixin} 字典

实例管理

open(on_login=None, install_path=None, timeout=30)

启动新微信客户端并连接。

  • 返回 int — 新启动的 PID

connect(pid, on_login=None)

连接已运行的微信客户端。

  • 返回 int — 连接成功的 PID

connect_all(on_login=None)

连接所有已运行的微信客户端。

  • 返回 List[int] — 所有已连接的 PID

disconnect(pid) / disconnect_all()

断开连接(不关闭微信)。

close(pid)

关闭微信窗口并断开连接。

get_weixin(pid) / wx[pid]

获取指定 PID 的 Weixin 实例。

动态代理

WeixinManager 上未定义的方法会自动代理到 Weixin 实例,第一个参数为 PID:

python
wx = WeixinManager()

# 等价于 wx.get_weixin(pid).send_text("张三", "hello")
wx.send_text(pid, "张三", "hello")

# 所有 Weixin 公开方法都支持
wx.get_contact_profile(pid, "张三")
wx.set_room_name(pid, "群名", "新名称")
wx.send_image(pid, "张三", "C:/pic.png")

消息监听

on(events=None) / once(events=None) / off(events=None, func=None)

注册/移除事件处理器。回调签名:

python
def handler(weixin: Weixin, chat: SeparateChat, message: Message): ...

通过 message.pid 区分消息来源。

add_chat_listen(pid, names)

为指定客户端注册监听。

add_all_chats_listen(pid=None)

自动发现并注册所有独立聊天窗口。

  • 返回 Dict[int, List[SeparateChat]]

remove_chat_listen(pid, names)

移除指定客户端的聊天监听。

remove_all_chats_listen(pid=None)

移除所有聊天监听。

run(listen_mode="ui", interval=0.1, idle_interval=0.1, auto_scan=False)

启动统一消息监听(阻塞运行)。

参数类型默认值说明
listen_modestr"ui"监听模式:"ui"(UI 自动化)或 "db"(数据库监听)
intervalfloat0.1有新消息时的轮询间隔(秒)
idle_intervalfloat0.1无新消息时的轮询间隔(秒)
auto_scanboolFalseUI 模式下是否自动扫描新窗口

数据库模式下为所有已连接客户端启动独立的 WAL 文件监控线程,回调签名不变。

stop()

停止监听。

运算符

python
len(wx)       # 已连接数量
pid in wx     # PID 是否已连接
wx[pid]       # 获取 Weixin 实例