

发布于 2026-05-09 15:59更新于 2026-05-09 16:29145浏览影刀RPA源码案例库
https://my.feishu.cn/wiki/Vz0JwAXByi0WmTkFNBmcKrtJnTe
视频教程
影刀RPA微信4.0@名片获取文本写入Excel方便下次@人复用
玩微信PC端自动化、聊天机器人、快捷回复的朋友,大概率都遇到过一个痛点:普通复制@昵称,粘贴到微信只是纯文本,无法触发真正的@提醒。
很多人好奇:微信@一个人复制后,剪贴板到底藏了什么格式?Python怎么读取、怎么伪造设置剪贴板?今天就把我全程提问、踩坑、实操落地的完整过程整理成干货,从原始问题、拆解过程到最终可直接运行的代码,全部分享给大家,看完你也能轻松搞定微信@人剪贴板自动化。
平时做Python桌面自动化、微信PC端相关开发,一直有个刚需:
想搞懂微信@一个人时,剪贴板到底是什么数据类型;
用Python怎么读取这种专属剪贴板数据;
能不能用Python手动设置剪贴板,伪造出可被微信识别的@人内容;
拿到微信原生@人剪贴板的原始格式列表后,能否直接复用还原剪贴板。
一开始以为只是普通文本剪贴板,深入后才发现:微信根本不用普通文本格式,而是自定义了专属富文本格式+多格式混合存储,这也是为什么直接拼@昵称粘贴无效的核心原因。
我在微信PC端复制@好友后,拿到了完整剪贴板格式列表,先给大家看原生结构:
[
{'id': 49161, 'name': 'DataObject', 'value': 'f4080c0000000000'},
{'id': 13, 'name': 'CF_UNICODETEXT', 'value': '\u2005@Kendall\u2005'},
{'id': 1, 'name': 'CF_TEXT', 'value': '?@Kendall?\x00\x00\x00\x00\\'},
{'id': 49720, 'name': 'WeChat_RichEdit_Format', 'value': '<WeChatRichEditFormat><EditElement type="0"><![CDATA[\u2005@Kendall\u2005]]></EditElement></WeChatRichEditFormat>'},
{'id': 49719, 'name': 'QQ_Unicode_RichEdit_Format', 'value': '<QQRichEditFormat><EditElement type="0"><![CDATA[\u2005@Kendall\u2005]]></EditElement></QQRichEditFormat>'},
{'id': 49718, 'name': 'x-application-mimetype-xwechat', 'value': '1778310146'},
{'id': 49171, 'name': 'Ole Private Data', 'value': '超长二进制私有数据'},
{'id': 16, 'name': 'CF_LOCALE', 'value': '\x04\x08'},
{'id': 7, 'name': 'CF_OEMTEXT', 'value': '?@Kendall?'}
]CF_UNICODETEXT(ID=13)
可视文本,前后带不可见空白字符\u2005,不是单纯的@昵称,少了隐藏字符微信就不认。
WeChat_RichEdit_Format(ID=49720)
微信专属富文本XML格式,新版微信@人固定type="0",包裹带隐藏字符的@内容,是微信识别@人的核心标识。
x-application-mimetype-xwechat(ID=49718)
存储好友微信内部唯一ID,也是绑定身份的关键,没有这个ID,无法精准匹配对应好友。
其余格式都是兼容、本地化、私有OLE数据,不用管,只需要保留上面3个核心格式就能实现完美还原。
只需把微信原生剪贴板格式列表传入函数,自动解析、自动写入剪贴板,粘贴到微信直接触发@提醒,可直接运行:
import win32clipboard
import win32con
def set_clipboard_from_wechat_format(format_list):
# 提取微信@人必需的三个核心格式
target_map = {
"WeChat_RichEdit_Format": None,
"x-application-mimetype-xwechat": None,
"CF_UNICODETEXT": None
}
for item in format_list:
name = item["name"]
if name in target_map:
target_map[name] = item["value"]
wechat_xml = target_map["WeChat_RichEdit_Format"]
wechat_inner_id = target_map["x-application-mimetype-xwechat"]
uni_text = target_map["CF_UNICODETEXT"]
if not all([wechat_xml, wechat_inner_id, uni_text]):
raise Exception("缺少微信@人必备剪贴板格式,无法还原")
# 打开并清空剪贴板
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
try:
# 写入微信富文本格式 49720
win32clipboard.SetClipboardData(49720, wechat_xml.encode("utf-8") + b"\x00")
# 写入微信内部ID格式 49718
win32clipboard.SetClipboardData(49718, str(wechat_inner_id).encode("utf-8"))
# 写入标准Unicode文本
win32clipboard.SetClipboardData(win32con.CF_UNICODETEXT, uni_text)
print("✅ 微信@人剪贴板设置完成,可直接去微信粘贴使用!")
print(f"📌 粘贴内容:{uni_text}")
print(f"🆔 绑定好友内部ID:{wechat_inner_id}")
finally:
win32clipboard.CloseClipboard()
# 微信原生剪贴板格式列表
if __name__ == "__main__":
clipboard_raw = [
{'id': 49161, 'name': 'DataObject', 'value': 'f4080c0000000000'},
{'id': 13, 'name': 'CF_UNICODETEXT', 'value': '\u2005@Kendall\u2005'},
{'id': 1, 'name': 'CF_TEXT', 'value': '?@Kendall?\x00\x00\x00\x00\\'},
{'id': 49720, 'name': 'WeChat_RichEdit_Format', 'value': '<WeChatRichEditFormat><EditElement type="0"><![CDATA[\u2005@Kendall\u2005]]></EditElement></WeChatRichEditFormat>'},
{'id': 49719, 'name': 'QQ_Unicode_RichEdit_Format', 'value': '<QQRichEditFormat><EditElement type="0"><![CDATA[\u2005@Kendall\u2005]]></EditElement></QQRichEditFormat>'},
{'id': 49718, 'name': 'x-application-mimetype-xwechat', 'value': '1778310146'},
{'id': 49171, 'name': 'Ole Private Data', 'value': '0000000068010000010000000500000000000000010000000d00000000000000000000000000000001000000ffffffff01000000fd7f0000010000000000000000000000000000000100000000000000000000000000000001000000ffffffff01000000fd7f00000100000000000000000000000000000038c2000000000000000000000000000001000000ffffffff01000000000000000100000000000000000000000000000037c2000000000000000000000000000001000000ffffffff01000000000000000100000000000000000000000000000036c2000000000000000000000000000001000000ffffffff010000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'},
{'id': 16, 'name': 'CF_LOCALE', 'value': '\x04\x08'},
{'id': 7, 'name': 'CF_OEMTEXT', 'value': '?@Kendall?'}
]
# 执行设置剪贴板
set_clipboard_from_wechat_format(clipboard_raw)只需安装Windows剪贴板依赖:
pip install pywin32不要想当然认为是普通文本
一开始误以为微信@人就是简单@昵称,直接拼接文本设置剪贴板,结果粘贴只是纯文字,没有@弹窗提醒。后来才明白:微信靠自定义格式+隐藏字符+内部ID三重校验,缺一不可。
微信版本不同,剪贴板格式ID不一样
旧版微信是49683格式、type=9;新版微信PC端变成49720、type=0,不能套用网上老旧教程,一定要以自己当前微信抓包到的剪贴板格式为准。
不用纠结冗余格式
抓取到的剪贴板有八九种格式,DataObject、Ole私有数据、LOCALE这些完全不用处理,只保留3个核心格式就能完美还原,减少无用代码。
复用原生格式列表最省事
不用自己手动拼接XML、构造隐藏字符,直接抓取微信原生复制后的格式列表,写代码自动解析复用,兼容性拉满,适配所有微信版本。
自动化开发核心思路
做微信PC自动化、快捷回复、机器人@人功能,不用逆向微信协议,从剪贴板格式入手是最简单、最稳定、无封号风险的方案。
微信@人剪贴板看似简单,实则藏了自定义富文本、隐藏字符、内部身份ID三层逻辑。通过一步步提问、拆解原生数据、编写适配代码,最终实现了传入任意微信@人剪贴板格式列表,就能一键还原可识别@的剪贴板。
对于做Python自动化、微信工具开发的朋友,掌握剪贴板多格式解析与伪造,能轻松实现一键@人、批量回复、快捷话术等功能,避开协议逆向的复杂坑,低成本落地需求。