// 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 SHELLProc(int nCode, WPARAM wParam, LPARAM lParam) { return CallNextHookEx(g_Hook, nCode, wParam, lParam); } /* *对所有进程安装钩子,所有新开进程都会加载这个dll **/ BOOL InstallHook() { if (g_Hook == NULL) { g_Hook = SetWindowsHookEx(WH_CALLWNDPROC, SHELLProc, 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; }