消息列表
聊天区里一串气泡,和左侧「会话列表」不是一回事:
两条学习路线(按难度)
- 只操作当前屏幕上看得见的消息(推荐先学)
bind_msg_list→list_viewport_messages/find_in_list/click_msg
不需要 IM SDK,只要知道消息列表的list_aid/list_name。 - 持续监听新消息、解析 Message 对象(进阶)
im_client(client=...)→GetNextNewMessage等
需要你自己提供客户端类或适配器。
winautox 不内置具体 IM 业务 SDK;
client=需自行传入类、模块路径,或适配器名(如'wechat',视安装包而定)。
方法一览(WinAuto)
零基础:先绑定消息列表,再列视口
准备工作
- 打开目标聊天窗口,确保右侧能看见几条消息。
- 用 快速开始 的方法 dump 控件树,搜索消息列表容器的
AutomationId/Name(下面用chat_message_list举例,请改成你的)。
用别名少写重复参数:
bind_msg_list
find_in_list / find_msg_in_list
只在 当前视口 里找。找不到不一定是没有这条消息,可能是被滚出去了——先 scroll / scroll_msg_into_view 再找。
index 从 1 开始表示「第几个匹配项」;timeout 为轮询等待秒数。
读消息快捷封装(需 IM client)
还不会配 client 时,先用上面的视口 list_viewport_messages / click_msg 即可完成「看见 → 点」。
API 参考(IM 客户端)
✨im_client
参数(im_client):
说明:部分 IM 客户端在
auto绑定的不是主窗口时,可能自动查找主窗口(取决于传入的client实现)。
返回值:IM 客户端实例。
消息项字段(Message)
✨GetNextNewMessage(推荐:轮询新消息列表)
首帧基线:循环内第一次调用通常返回空 batch(不交付历史消息),之后才会在侧栏未读或当前聊天新消息时交付。单次调用无法持续监听。
参数:
返回值:
- 类型:
dict - 字段:
chat_name、chat_type、msg(List[Message])
✨GetNextUnreadBarMessages
处理当前聊天内「N条新消息」跳转条(不会被 GetNextNewMessage 自动处理)。
返回值:同 GetNextNewMessage;无跳转条时 {}
✨GetAllMessage / ✨GetNewMessage
✨GetNextListenChatMessage / ✨AddListenChat
独立聊天子窗口(双击会话弹出)的消息列表:
✨MakeMessageAnchor / ✨ResolveMessageByAnchor(消息锚点)
处理 GetNextNewMessage callback 里的 msg 时,可先生成锚点,后续即使消息因滚动、Recycler 重绘导致 runtimeid 变化或位置移动,仍可在当前视口内按锚点找回同一条并继续操作(下载、点击、转文字等)。
原理(与 GetNextNewMessage 内部一致):
runtimeid在重绘/切会话后会变,不要只靠GetMessageById(rid)长期追踪;应用MakeMessageAnchor+ResolveMessageByAnchor。
WinAuto 等价调用:auto.make_msg_anchor(msg) / auto.resolve_msg_by_anchor(anchor)。
按 type 遍历消息列表示例
msg.type 分支处理示例见上文 API,以及 调试与示例。