在Windows系统中用VC 实现钩子机制(1)(2)
2014-03-23 01:26
导读:建立钩子程序时需要把钩子处理整合到动态链接库中,所以例程中需要建立两个project。 1. 钩子处理动态链接库 (1) 选择mfc appwizard(dll)创建一个新proj
建立钩子程序时需要把钩子处理整合到动态链接库中,所以例程中需要建立两个project。
1. 钩子处理动态链接库
(1) 选择mfc appwizard(dll)创建一个新project,命名为“spy”。
(2) 选择mfc extension dll类型。
(3) 创建一个新的头文件,命名为“hook.h”,修改它的代码如下:
extern "C" LRESULT CALLBACK mouseproc(int code,WPARAM wparam,LPARAM lparam); //钩子处理函数
extern "C" bool WINAPI starthook(); //启动钩子函数
extern "C" bool WINAPI stophook(); //撤销钩子函数
extern "C" int WINAPI getresultl(); //取得鼠标左键单击次数的函数
extern "C" int WINAPI getresultr(); //取得鼠标右键单击次数的函数
(4) 修改spy.cpp程序代码如下:
#include "hook.h" //包含头文件hook#pragma data_seg("publicdata") //定义全局数据段
HHOOK hhook=NULL; //钩子句柄
HINSTANCE pinstance=NULL;//钩子模块句柄
UINT mouseclickl=0; //记录鼠标左键单击次数的变量
UINT mouseclickr=0;//记录鼠标右键单击次数
#pragma data_seg()extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{ if (dwReason == DLL_PROCESS_ATTACH)
{…… //省略部分机器生成代码
new CDynLinkLibrary(SpyDLL);
pinstance=hInstance;//取得模块句柄
}
……;
} extern "C" LRESULT CALLBACK mouseproc(int code, WPARAM wparam,LPARAM lparam)//钩子处理函
{
if (code