zpzDll.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. // zpzDll.cpp : 定义 DLL 应用程序的导出函数。
  2. //
  3. #include "stdafx.h"
  4. #include "define.h"
  5. #include "zpzDll.h"
  6. //共享数据
  7. #pragma data_seg("shared")
  8. HWND g_hWnd = NULL;
  9. char g_data[MAX_DATA_LENGTH] = {0};
  10. int data_length = 0;
  11. #pragma data_seg()
  12. #pragma comment(linker,"/SECTION:shared,RWS")
  13. HHOOK g_Hook = NULL;
  14. extern HINSTANCE g_Inst;
  15. /*
  16. *钩子过程函数,不做任何处理,因为目的仅仅是把dll注入到进程
  17. **/
  18. LRESULT CALLBACK SHELLProc(int nCode, WPARAM wParam, LPARAM lParam)
  19. {
  20. return CallNextHookEx(g_Hook, nCode, wParam, lParam);
  21. }
  22. /*
  23. *对所有进程安装钩子,所有新开进程都会加载这个dll
  24. **/
  25. BOOL InstallHook()
  26. {
  27. if (g_Hook == NULL)
  28. {
  29. g_Hook = SetWindowsHookEx(WH_CALLWNDPROC, SHELLProc, g_Inst, 0);
  30. if (g_Hook != NULL)
  31. {
  32. return TRUE;
  33. }
  34. }
  35. return FALSE;
  36. }
  37. void UninstallHook()
  38. {
  39. if (UnhookWindowsHookEx(g_Hook))
  40. {
  41. g_Hook = NULL;
  42. }
  43. }
  44. void SetHwnd(HWND hWnd)
  45. {
  46. g_hWnd = hWnd;
  47. }
  48. /*
  49. *取出抓取到的消息,取出后就清空,保证每个消息只会取出一次
  50. **/
  51. void HookGetData(char* dst, int* length)
  52. {
  53. //把数据复制出来
  54. memcpy_s(dst, data_length, g_data, data_length);
  55. *length = data_length;
  56. //清空数据
  57. memset(g_data, 0, MAX_DATA_LENGTH);
  58. data_length = 0;
  59. }