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() 连接所有已运行的微信客户端。
属性
| 属性 | 类型 | 说明 |
|---|---|---|
pids | List[int] | 所有已连接的 PID 列表 |
instances | Dict[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_mode | str | "ui" | 监听模式:"ui"(UI 自动化)或 "db"(数据库监听) |
interval | float | 0.1 | 有新消息时的轮询间隔(秒) |
idle_interval | float | 0.1 | 无新消息时的轮询间隔(秒) |
auto_scan | bool | False | UI 模式下是否自动扫描新窗口 |
数据库模式下为所有已连接客户端启动独立的 WAL 文件监控线程,回调签名不变。
stop()
停止监听。
运算符
python
len(wx) # 已连接数量
pid in wx # PID 是否已连接
wx[pid] # 获取 Weixin 实例