void AndroidRun() { int maxCount = int.MaxValue; if (!softReg.GetIsReg()) { maxCount = 10; MessageBox.Show("非注册用户暂时支持部分导出 \n如果导出全量信息请到https://www.weixinxqm.com/购买注册!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information); } var saveBase = savePathTextBox.Text; Directory.CreateDirectory(saveBase); AddLog("分析文件夹结构"); AndroidWeChatInterface wechat = null; if (string.IsNullOrEmpty(resPathTextBox.Text)) { wechat = new AndroidWeChatInterface(wechatPathTextBox.Text); } else { wechat = new AndroidWeChatInterface(wechatPathTextBox.Text, resPathTextBox.Text); } wechat.Init(); AddLog("查找UID"); var users = wechat.users; AddLog("找到" + users.Count + "个账号的消息记录"); var uidList = new List <DisplayItem>(); foreach (var user in users) { user.Init(); AddLog("开始处理UID: " + user.uid); AddLog("打开数据库"); if (!user.OpenMMSqlite()) { AddLog("无法打开数据库"); continue; } AddLog("读取账号信息"); if (!user.GetUserBasics()) { AddLog("没有找到本人信息,用默认值替代"); } Friend myself = user.myself; AddLog("微信号:" + myself.ID() + " 昵称:" + myself.DisplayName()); AddLog("读取好友列表"); if (!user.GetFriendsDict(out int friendcount)) { AddLog("获取好友列表失败,跳过"); continue; } if (!user.GetChatRoomMember(out int chatroomCount)) { AddLog("获取聊天室用户列表失败,跳过"); continue; } AddLog("找到" + (friendcount - chatroomCount) + "个好友"); AddLog("找到" + chatroomCount + "个聊天室"); AddLog("查找对话:"); user.GetChatSessions(out List <string> chats); AddLog("找到" + chats.Count + "个对话"); var userSaveBase = Path.Combine(saveBase, myself.ID()); Directory.CreateDirectory(userSaveBase); user.userSaveDir = userSaveBase; AddLog("导出好友列表:"); if (user.saveFriends(maxCount, out int exportCount)) { AddLog("导出" + exportCount + "个好友"); } else { AddLog("导出好友列表出错"); } var emojidown = new HashSet <DownloadTask>(); var chatList = new List <DisplayItem>(); if (htmlRadioButton.Checked) { try { AddLog("复制头像:"); user.CopyResource(); File.Copy("res\\[email protected]", Path.Combine(userSaveBase, "avatar", "*****@*****.**")); } catch (Exception) { } } foreach (var chat in chats) { string displayname = chat; Friend friend = user.GetFriend(chat); if (friend != null) { displayname = friend.DisplayName(); AddLog("处理与" + displayname + "的对话"); } else { AddLog("未找到好友信息,用默认名字代替"); } if (textRadioButton.Checked) { if (user.SaveTextRecord(chat, maxCount, out int count)) { AddLog("成功处理" + count + "条"); } else { AddLog("失败"); } } else if (htmlRadioButton.Checked) { if (user.SaveHtmlRecord(chat, maxCount, out int count, out HashSet <DownloadTask> _emojidown)) { AddLog("成功处理" + count + "条"); chatList.Add(new DisplayItem() { pic = "avatar/" + (friend != null ? friend.GetAndroidUserAvatar() : "*****@*****.**"), text = displayname, link = chat + ".html" }); } else { AddLog("失败"); } emojidown.UnionWith(_emojidown); } } if (htmlRadioButton.Checked) { BaseWeChat.MakeListHTML(chatList, Path.Combine(userSaveBase, "聊天记录.html")); } var downloader = new Downloader(6); var emojidir = Path.Combine(userSaveBase, "Emoji"); Directory.CreateDirectory(emojidir); if (emojidown != null && emojidown.Count > 0) { AddLog("下载" + emojidown.Count + "个表情"); foreach (var item in emojidown) { downloader.AddTask(item.url, Path.Combine(emojidir, item.filename)); } } uidList.Add(new DisplayItem() { pic = myself.ID() + "/avatar/" + user.myself.GetAndroidUserAvatar(), text = myself.DisplayName(), link = myself.ID() + "/聊天记录.html" }); downloader.StartDownload(); downloader.WaitToEnd(); AddLog("完成当前账号"); }
private void IphoneRun() { int maxCount = int.MaxValue; if (!softReg.GetIsReg()) { maxCount = 10; MessageBox.Show("非注册用户暂时支持部分导出 \n如果导出全量信息请到https://www.weixinxqm.com/购买注册!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information); } var saveBase = textBox1.Text; Directory.CreateDirectory(saveBase); AddLog("分析文件夹结构"); IphoneWeChatInterface wechat = new IphoneWeChatInterface(((IPhoneBackup)comboBox1.SelectedItem).path, files92); wechat.BuildFilesDictionary(); AddLog("查找UID"); var UIDs = wechat.FindUIDs(); AddLog("找到" + UIDs.Count + "个账号的消息记录"); var uidList = new List <DisplayItem>(); int delta = 90 / ((UIDs.Count > 0 ? UIDs.Count : 1) * 5); foreach (var uid in UIDs) { var userBase = Path.Combine("Documents", uid); AddLog("开始处理UID: " + uid); AddLog("读取账号信息"); if (wechat.GetUserBasics(uid, userBase, out Friend myself)) { AddLog("微信号:" + myself.ID() + " 昵称:" + myself.DisplayName()); } else { AddLog("没有找到本人信息,用默认值替代"); } var userSaveBase = Path.Combine(saveBase, myself.ID()); Directory.CreateDirectory(userSaveBase); AddLog("正在打开数据库"); if (!wechat.OpenMMSqlite(userBase, out System.Data.SQLite.SQLiteConnection conn)) { AddLog("打开MM.sqlite失败,跳过"); continue; } if (wechat.OpenWCDBContact(userBase, out SQLiteConnection wcdb)) { AddLog("存在WCDB,与旧版好友列表合并使用"); } AddLog("读取好友列表"); if (!wechat.GetFriendsDict(conn, wcdb, myself, out Dictionary <string, Friend> friends, out int friendcount)) { AddLog("读取好友列表失败,跳过"); continue; } AddLog("找到" + friendcount + "个好友/聊天室"); AddLog("导出好友列表:"); BaseWeChat.saveFriends(Path.Combine(userSaveBase, "好友列表.txt"), friends, maxCount, out int exportCount); AddLog("导出" + exportCount + "个好友"); conn.Close(); wcdb.Close(); var emojidown = new HashSet <DownloadTask>(); var chatList = new List <DisplayItem>(); var messageDBs = wechat.FindMessageDB(uid); foreach (var messageDB in messageDBs) { if (!wechat.OpenMessageSqlite(messageDB, out SQLiteConnection msgConn)) { AddLog("读取" + messageDB + "出错,跳过"); continue; } AddLog("查找对话:" + messageDB); wechat.GetChatSessions(msgConn, out List <string> chats); AddLog("找到" + chats.Count + "个对话"); foreach (var chat in chats) { var hash = chat; string displayname = chat, id = displayname; Friend friend = null; if (friends.ContainsKey(hash)) { friend = friends[hash]; displayname = friend.DisplayName(); AddLog("处理与" + displayname + "的对话"); id = friend.ID(); } else { AddLog("未找到好友信息,用默认名字代替"); } if (textRadioButton.Checked) { if (wechat.SaveTextRecord(msgConn, Path.Combine(userSaveBase, id + ".txt"), displayname, id, myself, chat, friend, friends, maxCount, out int count)) { AddLog("成功处理" + count + "条"); } else { AddLog("失败"); } } else if (htmlRadioButton.Checked) { if (wechat.SaveHtmlRecord(msgConn, userBase, userSaveBase, displayname, id, myself, chat, friend, friends, maxCount, out int count, out HashSet <DownloadTask> _emojidown)) { AddLog("成功处理" + count + "条"); chatList.Add(new DisplayItem() { pic = "Portrait/" + (friend != null ? friend.FindPortrait() : "*****@*****.**"), text = displayname, link = id + ".html" }); } else { AddLog("失败"); } emojidown.UnionWith(_emojidown); } } msgConn.Close(); } if (htmlRadioButton.Checked) { BaseWeChat.MakeListHTML(chatList, Path.Combine(userSaveBase, "聊天记录.html")); } var portraitdir = Path.Combine(userSaveBase, "Portrait"); Directory.CreateDirectory(portraitdir); var downlist = new HashSet <DownloadTask>(); foreach (var item in friends) { var tfriend = item.Value; if (!tfriend.PortraitRequired) { continue; } if (tfriend.Portrait != null && tfriend.Portrait != "") { downlist.Add(new DownloadTask() { url = tfriend.Portrait, filename = tfriend.ID() + ".jpg" }); } //if (tfriend.PortraitHD != null && tfriend.PortraitHD != "") downlist.Add(new DownloadTask() { url = tfriend.PortraitHD, filename = tfriend.ID() + "_hd.jpg" }); } var downloader = new Downloader(6); if (downlist.Count > 0) { AddLog("下载" + downlist.Count + "个头像"); foreach (var item in downlist) { downloader.AddTask(item.url, Path.Combine(portraitdir, item.filename)); } try { File.Copy("res\\[email protected]", Path.Combine(portraitdir, "*****@*****.**")); } catch (Exception) { } } var emojidir = Path.Combine(userSaveBase, "Emoji"); Directory.CreateDirectory(emojidir); if (emojidown != null && emojidown.Count > 0) { AddLog("下载" + emojidown.Count + "个表情"); foreach (var item in emojidown) { downloader.AddTask(item.url, Path.Combine(emojidir, item.filename)); } } uidList.Add(new DisplayItem() { pic = myself.ID() + "/Portrait/" + myself.FindPortrait(), text = myself.DisplayName(), link = myself.ID() + "/聊天记录.html" }); downloader.StartDownload(); downloader.WaitToEnd(); AddLog("完成当前账号"); }