| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- // zpzDll.cpp : 定义 DLL 应用程序的导出函数。
- //
- #include "stdafx.h"
- #include "define.h"
- #include "zpzDll.h"
- //共享数据
- #pragma data_seg("shared")
- HWND g_hWnd = NULL;
- char g_data[MAX_DATA_LENGTH] = {0};
- int data_length = 0;
- #pragma data_seg()
- #pragma comment(linker,"/SECTION:shared,RWS")
- HHOOK g_Hook = NULL;
- extern HINSTANCE g_Inst;
- /*
- *钩子过程函数,不做任何处理,因为目的仅仅是把dll注入到进程
- **/
- LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
- {
- CWPSTRUCT *pMsg = (CWPSTRUCT *)lParam;
- return CallNextHookEx(g_Hook, nCode, wParam, lParam);
- }
- /*
- *对所有进程安装钩子,所有新开进程都会加载这个dll
- **/
- BOOL InstallHook()
- {
- if (g_Hook == NULL)
- {
- g_Hook = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, g_Inst, 0);
- if (g_Hook != NULL)
- {
- return TRUE;
- }
- }
- return FALSE;
- }
- void UninstallHook()
- {
- if (UnhookWindowsHookEx(g_Hook))
- {
- g_Hook = NULL;
- }
- }
- void SetHwnd(HWND hWnd)
- {
- g_hWnd = hWnd;
- }
- /*
- *取出抓取到的消息,取出后就清空,保证每个消息只会取出一次
- **/
- void HookGetData(char* dst, int* length)
- {
- //把数据复制出来
- memcpy_s(dst, data_length, g_data, data_length);
- *length = data_length;
- //清空数据
- memset(g_data, 0, MAX_DATA_LENGTH);
- data_length = 0;
- }
|