自己分析了一个星期了也没有进展,普通的短的文字的还是可以拼凑出来的,但是超过一定长度或者是换了格式,拼凑出来的数据就不对了,有能分析的大佬帮忙看看是怎么处理的这个数据,感激不尽
为了方便测试,用AI写了个提取和写入的脚本,通过企业微信复制了内容之后,可以提取到“WeWork Message”格式的数据,以16进制的方式显示在软件上,下边是可以将16进制的内容写回剪切板,但是不知道他是通过什么方式转成16进制数据进行存储的,希望有大佬能帮忙把这个序列化和反序列化的方法通过python实现,这样就可以将我想要写入的内容直接写到剪切板了(不同的消息类型可能不一样,比如文字的、图片的、视频、视频号、卡片消息、消息记录等等)import tkinter as tk
from tkinter import ttk
import win32clipboard as wcb
import win32con
import binascii
# 格式字典,用于将格式ID转换为可读名称
format_names = {
win32con.CF_TEXT: 'CF_TEXT',
win32con.CF_UNICODETEXT: 'CF_UNICODETEXT',
win32con.CF_BITMAP: 'CF_BITMAP',
win32con.CF_DIB: 'CF_DIB',
win32con.CF_DIBV5: 'CF_DIBV5',
win32con.CF_ENHMETAFILE: 'CF_ENHMETAFILE',
win32con.CF_METAFILEPICT: 'CF_METAFILEPICT',
win32con.CF_SYLK: 'CF_SYLK',
win32con.CF_DIF: 'CF_DIF',
win32con.CF_TIFF: 'CF_TIFF',
win32con.CF_OEMTEXT: 'CF_OEMTEXT',
win32con.CF_DIB: 'CF_DIB',
win32con.CF_PALETTE: 'CF_PALETTE',
win32con.CF_PENDATA: 'CF_PENDATA',
win32con.CF_RIFF: 'CF_RIFF',
win32con.CF_WAVE: 'CF_WAVE',
win32con.CF_UNICODETEXT: 'CF_UNICODETEXT',
win32con.CF_HDROP: 'CF_HDROP', # 文件拖放格式
win32con.CF_LOCALE: 'CF_LOCALE',
win32con.CF_DIBV5: 'CF_DIBV5',
win32con.CF_OWNERDISPLAY: 'CF_OWNERDISPLAY',
win32con.CF_DSPTEXT: 'CF_DSPTEXT',
win32con.CF_DSPBITMAP: 'CF_DSPBITMAP',
win32con.CF_DSPMETAFILEPICT: 'CF_DSPMETAFILEPICT',
win32con.CF_DSPENHMETAFILE: 'CF_DSPENHMETAFILE',
class WeWorkClipboardApp:
def __init__(self, root):
self.root = root
self.root.title("WeWork剪贴板同步工具")
self.root.geometry("600x500")
# 创建主框架
self.main_frame = ttk.Frame(self.root, padding="20")
self.main_frame.pack(fill=tk.BOTH, expand=True)
# 标题
self.title_label = ttk.Label(self.main_frame, text="WeWork Message 剪贴板工具", font=('Arial', 14, 'bold'))
self.title_label.pack(pady=10)
# 格式名称输入区域
self.format_frame = ttk.Frame(self.main_frame)
self.format_frame.pack(fill=tk.X, pady=10)
self.format_label = ttk.Label(self.format_frame, text="格式名称:")
self.format_label.pack(side=tk.LEFT, padx=5)
self.format_entry = ttk.Entry(self.format_frame, width=40)
self.format_entry.pack(side=tk.LEFT, padx=5, fill=tk.X, expand=True)
self.format_entry.insert(0, "WeWork Message") # 默认格式名称
# 提取数据按钮
self.extract_btn = ttk.Button(self.main_frame, text="提取数据", command=self.extract_wework_data)
self.extract_btn.pack(pady=10)
# 第一个输入框(显示提取的数据)
self.extract_label = ttk.Label(self.main_frame, text="提取的数据(十六进制):")
self.extract_label.pack(anchor=tk.W, pady=5)
self.extract_text = tk.Text(self.main_frame, height=8, width=60)
self.extract_text.pack(fill=tk.BOTH, expand=True, pady=5)
# 写入数据按钮
self.write_btn
...(已截断)
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-289363.htm
[求助]电脑端企业微信剪切板WeWork Message格式数据序列化和反序列化算法
432 浏览
1 回复
import sys
import binascii
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel, QLineEdit,
QPushButton, QTextEdit, QVBoxLayout, QHBoxLayout)
from PyQt5.QtGui import QClipboard
class WeWorkClipboardTool(QWidget):
def __init__(self):
super().__init__()
self.initUI()
self.clipboard = QApplication.clipboard() # 系统剪贴板对象
def initUI(self):
self.setWindowTitle("WeWork剪贴板同步工具")
self.resize(600, 400)
# 格式名称输入
format_layout = QHBoxLayout()
format_layout.addWidget(QLabel("格式名称:"))
self.format_edit = QLineEdit("WeWork Message")
format_layout.addWidget(self.format_edit)
# 提取数据按钮
self.extract_btn = QPushButton("提取数据")
self.extract_btn.clicked.connect(self.extract_data)
# 提取的数据显示
extract_layout = QVBoxLayout()
extract_layout.addWidget(QLabel("提取的数据(十六进制):"))
self.extract_text = QTextEdit()
extract_layout.addWidget(self.extract_text)
# 写入数据按钮
self.write_btn = QPushButton("写入数据")
self.write_btn.clicked.connect(self.write_data)
# 要写入的数据输入
write_layout = QVBoxLayout()
write_layout.addWidget(QLabel("要写入的数据(十六进制):"))
self.write_text = QTextEdit()
write_layout.addWidget(self.write_text)
# 整体布局
main_layout = QVBoxLayout()
main_layout.addLayout(format_layout)
main_layout.addWidget(self.extract_btn)
main_layout.addLayout(extract_layout)
main_layout.addWidget(self.write_btn)
main_layout.addLayout(write_layout)
self.setLayout(main_layout)
# 提取剪贴板数据并转十六进制
def extract_data(self):
clipboard_data = self.clipboard.text() # 读取剪贴板文本
# 转十六进制(若为二进制数据,需用self.clipboard.mimeData().data()处理)
hex_data = binascii.hexlify(clipboard_data.encode("utf-8")).decode("utf-8")
self.extract_text.setText(hex_data)
# 将十六进制数据转回剪贴板
def write_data(self):
hex_data = self.write_text.toPlainText().replace(" ", "").replace("\n", "")
try:
raw_data = binascii.unhexlify(hex_data).decode("utf-8")
self.clipboard.setText(raw_data) # 写入剪贴板
except binascii.Error:
self.write_text.setText("十六进制格式错误!")
if __name__ == "__main__":
app = QApplication(sys.argv)
tool = WeWorkClipboardTool()
tool.show()
sys.exit(app.exec_())
import binascii
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel, QLineEdit,
QPushButton, QTextEdit, QVBoxLayout, QHBoxLayout)
from PyQt5.QtGui import QClipboard
class WeWorkClipboardTool(QWidget):
def __init__(self):
super().__init__()
self.initUI()
self.clipboard = QApplication.clipboard() # 系统剪贴板对象
def initUI(self):
self.setWindowTitle("WeWork剪贴板同步工具")
self.resize(600, 400)
# 格式名称输入
format_layout = QHBoxLayout()
format_layout.addWidget(QLabel("格式名称:"))
self.format_edit = QLineEdit("WeWork Message")
format_layout.addWidget(self.format_edit)
# 提取数据按钮
self.extract_btn = QPushButton("提取数据")
self.extract_btn.clicked.connect(self.extract_data)
# 提取的数据显示
extract_layout = QVBoxLayout()
extract_layout.addWidget(QLabel("提取的数据(十六进制):"))
self.extract_text = QTextEdit()
extract_layout.addWidget(self.extract_text)
# 写入数据按钮
self.write_btn = QPushButton("写入数据")
self.write_btn.clicked.connect(self.write_data)
# 要写入的数据输入
write_layout = QVBoxLayout()
write_layout.addWidget(QLabel("要写入的数据(十六进制):"))
self.write_text = QTextEdit()
write_layout.addWidget(self.write_text)
# 整体布局
main_layout = QVBoxLayout()
main_layout.addLayout(format_layout)
main_layout.addWidget(self.extract_btn)
main_layout.addLayout(extract_layout)
main_layout.addWidget(self.write_btn)
main_layout.addLayout(write_layout)
self.setLayout(main_layout)
# 提取剪贴板数据并转十六进制
def extract_data(self):
clipboard_data = self.clipboard.text() # 读取剪贴板文本
# 转十六进制(若为二进制数据,需用self.clipboard.mimeData().data()处理)
hex_data = binascii.hexlify(clipboard_data.encode("utf-8")).decode("utf-8")
self.extract_text.setText(hex_data)
# 将十六进制数据转回剪贴板
def write_data(self):
hex_data = self.write_text.toPlainText().replace(" ", "").replace("\n", "")
try:
raw_data = binascii.unhexlify(hex_data).decode("utf-8")
self.clipboard.setText(raw_data) # 写入剪贴板
except binascii.Error:
self.write_text.setText("十六进制格式错误!")
if __name__ == "__main__":
app = QApplication(sys.argv)
tool = WeWorkClipboardTool()
tool.show()
sys.exit(app.exec_())