ProcessHelper.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using System.Runtime.InteropServices;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using System.Windows;
  9. namespace WechatPCMsgBakTool.Helpers
  10. {
  11. public class ProcessHelper
  12. {
  13. public static Process? GetProcess(string ProcessName)
  14. {
  15. Process[] processes = Process.GetProcessesByName(ProcessName);
  16. if (processes.Length == 0)
  17. return null;
  18. else if(processes.Length > 1) {
  19. SelectWechat selectWechat = new SelectWechat();
  20. MessageBox.Show("检测到有多个微信,请选择本工作区对应的微信");
  21. selectWechat.ShowDialog();
  22. if (selectWechat.SelectProcess == null)
  23. return null;
  24. Process? p = processes.ToList().Find(x => x.Id.ToString() == selectWechat.SelectProcess.ProcessId);
  25. if (p == null)
  26. return null;
  27. return p;
  28. }
  29. else
  30. return processes[0];
  31. }
  32. public static ProcessModule? FindProcessModule(int ProcessId, string ModuleName)
  33. {
  34. Process process = Process.GetProcessById(ProcessId);
  35. foreach (ProcessModule module in process.Modules)
  36. {
  37. if (module.ModuleName == ModuleName)
  38. return module;
  39. }
  40. return null;
  41. }
  42. public static byte[]? ReadMemoryDate(IntPtr hProcess, IntPtr lpBaseAddress, int nSize = 100)
  43. {
  44. byte[] array = new byte[nSize];
  45. if (ReadProcessMemory(hProcess, lpBaseAddress, array, nSize, 0) == 0)
  46. return null;
  47. else
  48. return array;
  49. }
  50. [DllImport("kernel32.dll")]
  51. public static extern int ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, int nSize, int lpNumberOfBytesRead);
  52. }
  53. }