diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 066ce8f..4eaf32b 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,11 +4,18 @@
-
+
+
+
+
-
-
-
+
+
+
+
+
+
+
@@ -80,7 +87,7 @@
-
+
@@ -88,15 +95,15 @@
- {
- "keyToString": {
- "DefaultHtmlFileTemplate": "HTML File",
- "RunOnceActivity.OpenProjectViewOnStart": "true",
- "RunOnceActivity.ShowReadmeOnStart": "true",
- "last_opened_file_path": "D:/Program Files/Python310/Scripts/pyuic5.exe",
- "settings.editor.selected.configurable": "preferences.pluginManager"
+
+}]]>
@@ -104,7 +111,7 @@
-
+
@@ -147,7 +154,7 @@
-
+
@@ -155,11 +162,11 @@
-
+
-
+
@@ -233,11 +240,11 @@
+
-
@@ -253,13 +260,6 @@
1672848140146
-
- 1680670947385
-
-
-
- 1680670947385
-
1682305451381
@@ -596,7 +596,14 @@
1700145601841
-
+
+ 1700147800698
+
+
+
+ 1700147800698
+
+
@@ -632,7 +639,6 @@
-
@@ -657,7 +663,8 @@
-
+
+
diff --git a/app/person.py b/app/person.py
index 09f22a4..c7f9cca 100644
--- a/app/person.py
+++ b/app/person.py
@@ -46,6 +46,8 @@ class ContactPC:
# Alias,Type,Remark,NickName,PYInitial,RemarkPYInitial,ContactHeadImgUrl.smallHeadImgUrl,ContactHeadImgUrl,bigHeadImgUrl
self.alias = contact_info.get('Alias')
self.nickName = contact_info.get('NickName')
+ if not self.remark:
+ self.remark = self.nickName
self.smallHeadImgUrl = contact_info.get('smallHeadImgUrl')
self.smallHeadImgBLOG = b''
self.avatar = QPixmap()
diff --git a/app/ui_pc/tool/pc_decrypt/decryptUi.py b/app/ui_pc/tool/pc_decrypt/decryptUi.py
index 44145d5..99579ae 100644
--- a/app/ui_pc/tool/pc_decrypt/decryptUi.py
+++ b/app/ui_pc/tool/pc_decrypt/decryptUi.py
@@ -51,7 +51,9 @@ class Ui_Dialog(object):
self.label_7.setObjectName("label_7")
self.gridLayout.addWidget(self.label_7, 1, 0, 1, 1)
self.lineEdit = QtWidgets.QLineEdit(Dialog)
- self.lineEdit.setStyleSheet("background:transparent;border-width:0;border-style:outset")
+ self.lineEdit.setStyleSheet("\n"
+ " background:transparent;border-width:0;border-style:outset\n"
+ " ")
self.lineEdit.setFrame(False)
self.lineEdit.setObjectName("lineEdit")
self.gridLayout.addWidget(self.lineEdit, 4, 1, 1, 1)
@@ -62,6 +64,7 @@ class Ui_Dialog(object):
self.label_6.setObjectName("label_6")
self.gridLayout.addWidget(self.label_6, 5, 0, 1, 1)
self.label_key = QtWidgets.QLabel(Dialog)
+ self.label_key.setMaximumSize(QtCore.QSize(200, 16777215))
self.label_key.setText("")
self.label_key.setObjectName("label_key")
self.gridLayout.addWidget(self.label_key, 5, 1, 1, 1)
@@ -90,6 +93,7 @@ class Ui_Dialog(object):
self.label_8.setObjectName("label_8")
self.gridLayout.addWidget(self.label_8, 6, 0, 1, 1)
self.label_db_dir = QtWidgets.QLabel(Dialog)
+ self.label_db_dir.setMaximumSize(QtCore.QSize(200, 300))
self.label_db_dir.setText("")
self.label_db_dir.setObjectName("label_db_dir")
self.gridLayout.addWidget(self.label_db_dir, 6, 1, 1, 1)
diff --git a/app/ui_pc/tool/pc_decrypt/decryptUi.ui b/app/ui_pc/tool/pc_decrypt/decryptUi.ui
index 846fc4c..04d9673 100644
--- a/app/ui_pc/tool/pc_decrypt/decryptUi.ui
+++ b/app/ui_pc/tool/pc_decrypt/decryptUi.ui
@@ -117,6 +117,12 @@
-
+
+
+ 200
+ 16777215
+
+
@@ -173,6 +179,12 @@
-
+
+
+ 200
+ 300
+
+
diff --git a/app/ui_pc/tool/pc_decrypt/pc_decrypt.py b/app/ui_pc/tool/pc_decrypt/pc_decrypt.py
index af71116..dd10e57 100644
--- a/app/ui_pc/tool/pc_decrypt/pc_decrypt.py
+++ b/app/ui_pc/tool/pc_decrypt/pc_decrypt.py
@@ -46,6 +46,7 @@ class DecryptControl(QWidget, decryptUi.Ui_Dialog):
self.label_pid.setText(str(self.info['pid']))
self.label_version.setText(self.info['version'])
self.lineEdit.setFocus()
+ self.checkBox.setChecked(True)
if self.wx_dir and os.path.exists(os.path.join(self.wx_dir, self.info['wxid'])):
self.label_ready.setText('已就绪')
except Exception as e:
@@ -59,6 +60,7 @@ class DecryptControl(QWidget, decryptUi.Ui_Dialog):
if directory:
self.label_db_dir.setText(directory)
self.wx_dir = directory
+ self.checkBox_2.setChecked(True)
if self.ready:
self.label_ready.setText('已就绪')
diff --git a/decrypt_window.py b/decrypt_window.py
index 04f7b7b..4151aa7 100644
--- a/decrypt_window.py
+++ b/decrypt_window.py
@@ -1,11 +1,9 @@
import ctypes
import sys
-import time
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import *
-from app.ui_pc import mainview
from app.ui_pc.tool.pc_decrypt import pc_decrypt
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("WeChatReport")
@@ -28,23 +26,6 @@ class ViewController(QWidget):
self.viewDecrypt.DecryptSignal.connect(self.show_success)
self.viewDecrypt.show()
- def loadMainWinView(self, username=None):
- """
- 聊天界面
- :param username: 账号
- :return:
- """
- username = ''
- start = time.time()
- self.viewMainWIn = mainview.MainWinController(username=username)
- self.viewMainWIn.setWindowTitle("Chat")
- # print(username)
- self.viewMainWIn.username = username
- # self.viewMainWIn.exitSignal.connect(self.loadDecryptView) # 不需要回到登录界面可以省略
- self.viewMainWIn.show()
- end = time.time()
- print('ok', end - start)
-
def show_success(self):
QMessageBox.about(self, "解密成功", "数据库文件存储在\napp/DataBase/Msg\n文件夹下")
@@ -52,7 +33,5 @@ class ViewController(QWidget):
if __name__ == '__main__':
app = QApplication(sys.argv)
view = ViewController()
- # view.loadPCDecryptView()
- view.loadMainWinView()
- # view.show_success()
+ view.loadPCDecryptView()
sys.exit(app.exec_())
diff --git a/doc/images/messages_demo.png b/doc/images/messages_demo.png
new file mode 100644
index 0000000..75da423
Binary files /dev/null and b/doc/images/messages_demo.png differ
diff --git a/doc/images/pc_contact.png b/doc/images/pc_contact.png
new file mode 100644
index 0000000..5770fd8
Binary files /dev/null and b/doc/images/pc_contact.png differ
diff --git a/doc/数据库介绍.md b/doc/数据库介绍.md
index 48510a2..2e3dd95 100644
--- a/doc/数据库介绍.md
+++ b/doc/数据库介绍.md
@@ -1,3 +1,4 @@
# 微信数据库介绍
-**这个人比较懒,还什么都没写**
\ No newline at end of file
+**这个人比较懒,还什么都没写**
+
diff --git a/doc/电脑端使用教程.md b/doc/电脑端使用教程.md
new file mode 100644
index 0000000..add9010
--- /dev/null
+++ b/doc/电脑端使用教程.md
@@ -0,0 +1,70 @@
+# 一、解密微信数据库
+
+## 主要功能
+
+1. 解密微信数据库
+2. 查看聊天记录
+3. 导出聊天记录
+ * CSV
+ * docx(待实现)
+ * HTML(待实现)
+
+## 安装
+
+```shell
+git clone https://github.com/LC044/WeChatMsg
+cd WeChatMsg
+pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
+```
+
+## 解密
+
+
+
+解密步骤:
+
+1. 登录微信
+
+2. 运行程序
+
+ ```shell
+ python decrypt_window.py
+ ```
+
+3. 点击获取信息
+
+ 
+
+4. 设置微信安装路径
+ 可以到微信->设置->文件管理查看
+ 
+
+ 点击**设置微信路径**按钮,选择该文件夹路径
+
+5. 获取到密钥和微信路径之后点击开始解密
+
+6. 解密后的数据库文件保存在./app/DataBase/Msg路径下
+
+
+
+## 查看聊天记录
+
+
+
+1. 运行程序
+
+```shell
+python main_pc.py
+```
+
+2. 选择联系人
+
+
+
+3. 导出聊天记录
+
+聊天记录保存在 **/data/聊天记录/** 文件夹下
+
+
+
+
\ No newline at end of file
diff --git a/main_pc.py b/main_pc.py
new file mode 100644
index 0000000..04f7b7b
--- /dev/null
+++ b/main_pc.py
@@ -0,0 +1,58 @@
+import ctypes
+import sys
+import time
+
+from PyQt5.QtGui import QIcon
+from PyQt5.QtWidgets import *
+
+from app.ui_pc import mainview
+from app.ui_pc.tool.pc_decrypt import pc_decrypt
+
+ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("WeChatReport")
+
+
+class ViewController(QWidget):
+ def __init__(self):
+ super().__init__()
+ self.setWindowTitle('解密')
+ self.setWindowIcon(QIcon('./app/data/icons/logo.svg'))
+ self.viewMainWIn = None
+ self.viewDecrypt = None
+
+ def loadPCDecryptView(self):
+ """
+ 登录界面
+ :return:
+ """
+ self.viewDecrypt = pc_decrypt.DecryptControl()
+ self.viewDecrypt.DecryptSignal.connect(self.show_success)
+ self.viewDecrypt.show()
+
+ def loadMainWinView(self, username=None):
+ """
+ 聊天界面
+ :param username: 账号
+ :return:
+ """
+ username = ''
+ start = time.time()
+ self.viewMainWIn = mainview.MainWinController(username=username)
+ self.viewMainWIn.setWindowTitle("Chat")
+ # print(username)
+ self.viewMainWIn.username = username
+ # self.viewMainWIn.exitSignal.connect(self.loadDecryptView) # 不需要回到登录界面可以省略
+ self.viewMainWIn.show()
+ end = time.time()
+ print('ok', end - start)
+
+ def show_success(self):
+ QMessageBox.about(self, "解密成功", "数据库文件存储在\napp/DataBase/Msg\n文件夹下")
+
+
+if __name__ == '__main__':
+ app = QApplication(sys.argv)
+ view = ViewController()
+ # view.loadPCDecryptView()
+ view.loadMainWinView()
+ # view.show_success()
+ sys.exit(app.exec_())
diff --git a/readme.md b/readme.md
index 69b45d6..f9c3c9c 100644
--- a/readme.md
+++ b/readme.md
@@ -94,7 +94,8 @@ pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
随便下载一个SQLite数据库查看软件就能打开数据库,例如[DB Browser for SQLite](https://sqlitebrowser.org/dl/)
-[数据库功能介绍](./doc/数据库介绍.md)
+* [数据库功能介绍](./doc/数据库介绍.md)
+* [更多功能介绍](./doc/电脑端使用教程.md)