MainWindow.xaml.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Runtime.CompilerServices;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using System.Windows;
  9. using System.Windows.Controls;
  10. using System.Windows.Data;
  11. using System.Windows.Documents;
  12. using System.Windows.Input;
  13. using System.Windows.Media;
  14. using System.Windows.Media.Imaging;
  15. using System.Windows.Navigation;
  16. using System.Windows.Shapes;
  17. using WechatPCMsgBakTool.Helpers;
  18. using WechatPCMsgBakTool.Interface;
  19. using WechatPCMsgBakTool.Model;
  20. namespace WechatPCMsgBakTool
  21. {
  22. /// <summary>
  23. /// Interaction logic for MainWindow.xaml
  24. /// </summary>
  25. public partial class MainWindow : Window
  26. {
  27. public string UserMsgPath { get; set; } = "";
  28. public MainWindow()
  29. {
  30. InitializeComponent();
  31. }
  32. private void select_user_msg_path_Click(object sender, RoutedEventArgs e)
  33. {
  34. if (Directory.Exists(txt_user_msg_path.Text))
  35. {
  36. UserMsgPath = txt_user_msg_path.Text;
  37. if (UserMsgPath.Substring(UserMsgPath.Length - 1, 1) == "\\") {
  38. UserMsgPath = UserMsgPath.Substring(0, UserMsgPath.Length - 1);
  39. }
  40. //判定数据目录是否存在
  41. if (Directory.Exists(UserMsgPath + "\\Msg"))
  42. {
  43. //MessageBox.Show("微信目录存在");
  44. }
  45. //复制数据DB
  46. WechatDBHelper.CreateUserWorkPath(UserMsgPath);
  47. string err = WechatDBHelper.MoveUserData(UserMsgPath);
  48. if(err != "")
  49. {
  50. MessageBox.Show(err);
  51. return;
  52. }
  53. else
  54. {
  55. MessageBox.Show("用户目录创建成功,请打开PC微信并登录,获取数据库秘钥解密");
  56. }
  57. }
  58. }
  59. private void decryption_user_msg_db_Click(object sender, RoutedEventArgs e)
  60. {
  61. byte[]? key = DecryptionHelper.GetWechatKey();
  62. if(key == null)
  63. {
  64. MessageBox.Show("微信密钥获取失败,请检查微信是否打开,或者版本不兼容");
  65. return;
  66. }
  67. WechatDBHelper.DecryUserData(key);
  68. MessageBox.Show("解密完成,请点击读取数据");
  69. }
  70. WXReader? Reader = null;
  71. private void read_user_msg_db_Click(object sender, RoutedEventArgs e)
  72. {
  73. list_sessions.Items.Clear();
  74. if (cb_use_local_decdb.IsChecked == true)
  75. {
  76. DBInfo info = WechatDBHelper.GetDBinfoOnLocal(txt_user_msg_path.Text);
  77. Reader = new WXReader(info);
  78. }
  79. else
  80. {
  81. Reader = new WXReader();
  82. }
  83. List<WXSession>? sessions = new List<WXSession>();
  84. sessions = Reader.GetWXSessions();
  85. if (sessions == null)
  86. {
  87. MessageBox.Show("咩都厶啊");
  88. return;
  89. }
  90. foreach (WXSession session in sessions)
  91. {
  92. list_sessions.Items.Add(session);
  93. }
  94. }
  95. private bool loading = false;
  96. private bool end = false;
  97. private void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
  98. {
  99. if (sender == null)
  100. return;
  101. ScrollViewer scrollViewer = (ScrollViewer)sender;
  102. if (scrollViewer.ScrollableHeight == 0)
  103. return;
  104. if (scrollViewer.ScrollableHeight - scrollViewer.ContentVerticalOffset < 10)
  105. {
  106. if (!loading && !end)
  107. {
  108. loading = true;
  109. //GetMsg();
  110. }
  111. }
  112. }
  113. private void list_sessions_MouseDoubleClick(object sender, MouseButtonEventArgs e)
  114. {
  115. }
  116. private void export_record_Click(object sender, RoutedEventArgs e)
  117. {
  118. WXSession selectItem = (WXSession)list_sessions.SelectedValue;
  119. if (selectItem != null)
  120. {
  121. IExport export = new HtmlExport();
  122. export.InitTemplate(selectItem);
  123. if(Reader == null)
  124. {
  125. MessageBox.Show("请先读取用户数据");
  126. return;
  127. }
  128. export.SetMsg(Reader, selectItem);
  129. export.SetEnd();
  130. string path = Reader.GetSavePath(selectItem);
  131. export.Save(path);
  132. MessageBox.Show("导出完成");
  133. }
  134. }
  135. private void find_session_person_Click(object sender, RoutedEventArgs e)
  136. {
  137. list_sessions.Items.Clear();
  138. if (Reader == null)
  139. Reader = new WXReader();
  140. List<WXContact>? sessions = new List<WXContact>();
  141. sessions = Reader.GetUser(txt_find_session.Text);
  142. if (sessions == null)
  143. {
  144. MessageBox.Show("咩都厶啊");
  145. return;
  146. }
  147. foreach (WXContact session in sessions)
  148. {
  149. WXSession session1 = new WXSession();
  150. session1.NickName = session.NickName;
  151. session1.UserName = session.UserName;
  152. list_sessions.Items.Add(session1);
  153. }
  154. }
  155. }
  156. }