列表与会话

列表操作

WinAuto 列表能力分两类:会话/控件列表(UIA ListControl)与聊天消息列表im_client + Message)。

会话列表(UIA)

适用于会话列表、联系人列表等 UIA ListControl:

# 获取列表项(返回 dict 列表,含 name、unread、mute、ctrl 等字段)
items = auto.get_list_items(
    list_type='ListControl',
    list_aid='session_list',
    item_cls='ChatSessionCell',
    unread_pattern=r'\[(\d+)条\]',
    mute_keyword='消息免打扰',
)

# 便捷方法(IM 会话列表语义,以 chatautox 默认适配目标为例)
sessions = auto.get_sessions(list_aid='session_list')
unread = auto.get_unread_sessions()
auto.click_session('示例会话')
auto.click_unread_session(index=0)
auto.click_all_unread()

消息列表(IM 客户端)

绑定主窗口后创建 IM 客户端,读取聊天区消息气泡列表(识别好友/自己、按类型处理):

from chatautox import WinAuto
from chatautox.param import WxResponse

auto = WinAuto.from_main_hwnd(WIN_CLASS, WIN_TITLES[0], mode='uia')
auto.activate()
time.sleep(0.3)
im = auto.im_client(debug=False, auto_listen=False)

def on_message(msg):
    # msg.attr: friend=对方 self=自己
    print(f"[{msg.attr}] {msg.type}: {msg.content}")

while True:
    batch = im.GetNextNewMessage(filter_mute=False, callback=on_message)
    for msg in batch.get('msg') or []:
        if msg.attr == 'friend' and msg.type == 'text':
            pass  # 处理对方文本
    time.sleep(1)
API用途
auto.im_client(...)创建 IM 客户端(默认内置 IM 适配器;绑定窗口非 IM 主窗口时自动查找主窗口)
im.GetNextNewMessage主窗口轮询新消息(推荐
im.GetAllMessage / im.GetNewMessage当前已打开聊天的全部/增量消息
im.GetNextUnreadBarMessages「N条新消息」跳转条
im.GetNextListenChatMessage独立子窗口消息

消息字段、msg.type 分支、下载/笔记等详见上文 消息列表处理消息处理指南
control_browser_lite「所有操作 → 消息列表处理」可一键生成代码。


API 参考

列表操作

✨get_list_items

获取 UIA 列表控件的全部项。

items = auto.get_list_items(
    list_type='ListControl',
    list_aid='session_list',
    item_cls='ChatSessionCell',
    unread_pattern=r'\[(\d+)条\]',
    mute_keyword='消息免打扰',
)

参数

参数名类型默认值描述
list_typestr'ListControl'列表 UIA 类型
list_namestr''列表 Name
list_aidstr''列表 AutomationId
list_clsstr''列表 ClassName
item_clsstr''列表项 ClassName
depthint15搜索深度
unread_patternstrNone未读数正则,如 r'\[(\d+)条\]'
mute_keywordstrNone免打扰关键词

返回值

  • 类型:list[dict]
  • 描述:每项 dict 常见字段:nameunreadmutectrl(UIA 列表项控件)等

✨get_sessions

获取全部会话(IM 会话列表语义)。

sessions = auto.get_sessions(list_aid='session_list', item_cls='ChatSessionCell')
for s in sessions:
    print(s.get('name'), '未读:', s.get('unread'), '免打扰:', s.get('mute'))

返回值

  • 类型:list[dict]

✨get_unread_sessions

获取有未读数的会话。

unread = auto.get_unread_sessions(list_aid='session_list')
print(f'未读会话 {len(unread)} 个')
for s in unread:
    print(s.get('name'), s.get('unread'))

返回值

  • 类型:list[dict]

✨click_session

点击指定会话。

auto.click_session('示例会话', list_aid='session_list', mode='uia')
auto.click_session('某群聊', exact=True)   # 名称须完全一致

参数

参数名类型默认值描述
namestr会话名称
exactboolFalse是否精确匹配

返回值

  • 类型:WinAuto

✨click_unread_session

点击第 N 个未读会话。

item = auto.click_unread_session(0, list_aid='session_list', mode='uia')
print('已点击:', item.get('name') if item else '无未读')

参数

参数名类型默认值描述
indexint0未读会话索引

返回值

  • 类型:WinAuto

✨click_all_unread

依次点击所有未读会话。

clicked = auto.click_all_unread(list_aid='session_list', mode='uia')
print('已依次点击:', clicked)

返回值

  • 类型:WinAuto

上一页滚动与窗口下一页消息列表