64,692
社区成员
发帖
与我相关
我的任务
分享
//Client.cpp
#include <Windows.h>
//#include "stdafx.h"
HWND m_hWnd;//窗口的句柄
HHOOK m_hHook;//钩子的句柄
DWORD m_ProcessId;//进程pid
HINSTANCE m_hinstDll;//dll的句柄
//卸载钩子
extern "C" BOOL _declspec(dllexport) UninstallRegHook()//输出卸在钩子函数
{
return(UnhookWindowsHookEx(m_hHook));
}
//钩子函数
LRESULT WINAPI Hook(int nCode,WPARAM wParam,LPARAM lParam)//空的钩子函数
{
SendMessage(m_hWnd,WM_COPYDATA,0,100);
return(CallNextHookEx(m_hHook,nCode,wParam,lParam));//执行钩子链表所指的下一个钩子子程
}
//安装API钩子
extern "C" BOOL _declspec(dllexport) InstallRegHook(LPCTSTR strCheck)
{
m_hHook=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)Hook,m_hinstDll,0);//把一个应用程序定义的钩子子程(这里是函数Hook)安装到钩子链表中,WH_GETMESSAGE是钩子的类型,m_hinstDll是本dll的句柄,就是入口函数的第一个参数
if (!m_hHook)
{
MessageBoxA(NULL,"安装钩子失败","失败",MB_OK);
return FALSE;
}
return TRUE;
}
BOOL WINAPI DllMain( HINSTANCE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
m_hinstDll = hModule;
if (ul_reason_for_call == DLL_PROCESS_ATTACH)
{
m_hWnd=FindWindow(NULL,"钩子测试");//获取窗口标题为"钩子测试"的句柄
if (!m_hWnd)
return FALSE;
GetWindowThreadProcessId(m_hWnd,&m_ProcessId);//获取窗口标题为"钩子测试"的进程pid
}
return TRUE;
}