CWxObject.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #ifndef __WX_OBJECT__
  2. #define __WX_OBJECT__
  3. #pragma once
  4. typedef struct _WNDINFO_
  5. {
  6. // 返回的窗口句柄;
  7. HWND hWxWnd;
  8. // 要遍历的进程id;
  9. DWORD dwWxProcId;
  10. // 返回的窗口线程id;
  11. DWORD dwThreadId;
  12. // 窗口名称;
  13. TCHAR szWndName[MAX_PATH];
  14. // 窗口类名;
  15. TCHAR szClassName[MAX_PATH];
  16. // 窗口原始大小;
  17. CRect rcWnd;
  18. }WNDINFO, *pWNDINFO;
  19. class CWxObject
  20. {
  21. public:
  22. CWxObject();
  23. explicit CWxObject(DWORD dwProcId, LPCTSTR lpDynamicLibraryPath);
  24. ~CWxObject();
  25. public:
  26. // 进程id;
  27. DWORD m_dwWxProcId;
  28. // 进程句柄;
  29. HANDLE m_hWxProcess;
  30. // 进程窗口句柄;
  31. HWND m_hWxMainWnd;
  32. WNDINFO m_WxMainWndInfo;
  33. HWND m_hWxLoginWnd;
  34. WNDINFO m_WxLoginWndInfo;
  35. // 窗口大小;
  36. CRect m_rcWxWnd;
  37. // 是否附加到主窗口;
  38. BOOL m_bAttached;
  39. private:
  40. // 动态库路径;
  41. WCHAR m_wszDllPath[MAX_PATH];
  42. CHAR m_szDllPath[MAX_PATH];
  43. // 路径分配的内存;
  44. LPVOID m_lpInjectData;
  45. LPVOID m_lpEjectData;
  46. // 路径长度;
  47. DWORD m_dwPathLen;
  48. // 注入线程句柄;
  49. HANDLE m_hInjectThread;
  50. // 卸载线程句柄;
  51. HANDLE m_hEjectThread;
  52. //
  53. static HHOOK m_hook;
  54. public:
  55. inline DWORD GetWxProcId() { return m_dwWxProcId; }
  56. inline HWND GetWxMainWnd() { return m_WxMainWndInfo.hWxWnd; }
  57. inline HWND GetWxLoginWnd() { return m_WxLoginWndInfo.hWxWnd; }
  58. // dll路径和要注入的进程id;
  59. void setInjectionObj(DWORD dwProcId, LPCTSTR lpDynamicLibraryPath);
  60. BOOL InjectDynamicLibrary();
  61. BOOL EjectDynamicLibrary();
  62. BOOL FindWxMainWnd();
  63. BOOL FindWxLoginWnd();
  64. BOOL Attach2MainWnd(CWnd *pMainWnd, BOOL bLoginWnd = FALSE);
  65. BOOL DetachWxWnd();
  66. BOOL SetHook();
  67. BOOL OpenWeChat();
  68. static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);
  69. static LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam);
  70. };
  71. #endif //__WX_OBJECT__