Message (基类)
所有消息类型的基类,提供通用属性和操作方法。
属性
| 属性 | 类型 | 说明 |
|---|---|---|
msg_id | int | 消息唯一 ID(基于 runtime_id 哈希) |
sender | str | 发送者名称 |
content | str | 消息内容(文本表示) |
source | Source | 消息来源:Source.SELF / Source.OTHERS / Source.SYSTEM |
room | str | None | 群聊名称,私聊为 None |
chat_type | str | 聊天类型("私聊" / "群聊" / "未知") |
type_label | str | 消息类型标签(如 "文本消息"、"图片消息" 等) |
status | MessageStatus | 消息发送状态 |
pid | int | 微信进程 PID |
raw_name | str | 原始控件 Name 属性 |
runtime_id | tuple | UIAutomation RuntimeId |
is_self | bool | 是否是自己发送的消息 |
ACTIONS 机制
每个消息子类通过 ACTIONS 列表声明支持哪些操作。调用不在列表中的方法会抛出 WxOperationError。
所有可用操作标识:
| 操作 | 说明 |
|---|---|
view | 查看/打开消息内容 |
hover | 悬浮鼠标到消息内容区域 |
scroll_to_visible | 将消息滚动到可视区域 |
refresh | 重新识别区域坐标和发送者 |
quote | 引用此消息 |
copy | 复制消息内容到剪贴板 |
collect | 收藏此条消息 |
translate | 翻译消息内容 |
forward | 转发给指定联系人 |
search | 搜一搜消息内容 |
revoke | 撤回消息 |
zoom_read | 放大阅读 |
add_to_emotion | 添加到自定义表情 |
save_as | 另存为到指定路径 |
delete | 删除消息 |
位置与可见性
is_in_list()
消息控件是否在消息列表的 UIA 树中。
- 返回
bool
is_in_view
消息控件是否在 message_view 的可视矩形范围内。
- 返回
bool
is_visible()
is_in_view 的别名。
- 返回
bool
scroll_into_view()
微调滚动使消息出现在可见区域(前提:消息已在列表中)。
- 返回
bool
scroll_to_visible(max_scroll=30)
持续向上滚动直到消息可见,超出范围自动回到底部。
- 返回
bool
center
获取消息内容区域的屏幕中心坐标。
- 返回
Tuple[int, int] | None
消息操作
view()
查看/打开消息内容(点击内容区域)。
hover()
悬浮鼠标到消息内容区域中心。
- 返回
bool
refresh()
刷新消息属性(确保消息在视野内,重新识别区域坐标和发送者)。
- 返回
Message
quote()
引用此消息(右键菜单 → 引用)。
copy()
复制消息内容。
- 返回
str— 复制到剪贴板的文本
collect()
收藏此消息。
translate()
翻译消息内容。
forward(nicknames, remark=None)
转发消息给指定联系人。
- nicknames
str | List[str]— 转发目标(支持多人) - remark
str | None— 转发留言
search()
搜一搜消息内容。
revoke()
撤回消息(仅限自己发的消息,2 分钟内)。
zoom_read()
放大阅读。
add_to_emotion()
添加到自定义表情。
save_as(file_path)
另存为文件。
- file_path
str— 保存路径(含文件名) - 返回
bool
delete()
删除此消息(会弹出确认框并自动确认)。
click_content()
点击消息内容区域中心。
click_headimg()
点击消息头像区域中心。
序列化
to_dict()
转为字典。
- 返回
dict
to_json(**kwargs)
转为 JSON 字符串。
- 返回
str
示例
python
chat = wx.chat_with("张三")
messages = chat.get_visible_messages()
for msg in messages:
print(f"[{msg.type_label}] {msg.sender}: {msg.content}")
print(f" 来源: {msg.source}, ID: {msg.msg_id}, 群: {msg.room}")
# 操作最后一条消息
last = messages[-1]
last.quote() # 引用
last.collect() # 收藏
last.forward(["李四"]) # 转发
last.delete() # 删除