话接上回,这次给个例子讲讲Hook的实例。
这个例子是设置一个全局钩子,捕捉其它程序的键盘消息。
首先,构建DLL,以便给其它程序映射。这个DLL文件名为KeyHook.h / KeyHook.cpp
在KeyHook.h里面,导出两个函数,分别是设置Hook和取消Hook的函数。
//-------------------------KeyHook.cpp---------------------//

#define EXPERT extern "C" __declspec(dllexport)

//定义DLL共享数据段,为的是这个段中的数据可以被本应用程序所改写
#pragma data_seg("HOOKSHARE")
HWND hwndServer=NULL;
#pragma data_seg()
#pragma comment(linker,"/section:HOOKSHARE,rws")

HINSTANCE hInst; //Dll的实例句柄
HHOOK hook; //Hook句柄

LRESULT WINAPI WndHookProc(int nCode,WPARAM wParam,LPARAM lParam); //钩子一旦挂上,这个WndHookProc就会接收其它应用程序的消息了。

BOOL APIENTRY DllMain( HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
}
下面,就要写我们的应用程序来处理DLL截获过来的消息了。假定我们的应用程序由一个对话框来处理。
对话框的文件名分别是:SendMsg.h SendMsg.cpp
//------------------SendMsg.h---------------------//

//添加两个Button,分别是Hook / Unhook ,他们的处理程序分别是OnHook和OnUnhook
afx_msg void OnHook();
afx_msg void OnUnhook();
//自定义消息,当窗口接收到WM_KEY_HOOK消息时,就是用onHookMsg函数来处理
afx_msg LRESULT OnHookMsg(WPARAM wParam,LPARAM lParam);
//--------------------SendMsg.cpp-------------------//
#include "SetHook.h" //把Dll的.h文件添加进项目

//自定义消息映射
ON_MESSAGE(WM_KEY_HOOK,OnHookMsg)

//当点击Hook按纽时,设置Hook
void CSendMsg::OnHook()
}
另外,还有其它编译时注意的事项,如果我们要编译本应用程序,需要和DLL一起编译,并且,要告诉编译器,这个项目的依赖项是KeyHook.dll(菜单:项目->项目依赖项)
相关文章:
-
2021-12-26
-
2022-12-23
-
2021-05-15
-
2021-07-13
-
2022-12-23
-
2021-06-02
-
2022-12-23
-
2021-11-23