论文首页哲学论文经济论文法学论文教育论文文学论文历史论文理学论文工学论文医学论文管理论文艺术论文 |
钩子能截获系统并得理发送给其它应用程序的消息,能完成一般程序无法完成的功能。掌握钩子的编程方法是很有必要的
钩子分类 :
1、WH_CALLWNDPROC和WH_CALLWNDPROCRET: 使你可以监视发送到窗口过程的消息
3、WH_DEBUG 调试钩子
4、WH_FOREGROUNDIDLE 当当应用程序的前台线程大概要变成空闲状态时,系统就会调用 WH_FOREGROUNDIDL
5、WH_JOURNALRECORD 监视和记录输入事件
6、WH_JOURNALPLAYBACK 回放用WH_JOURNALRECORD记录事件
7、WH_KEYBOARD 键盘钩子
9、WH_KEYBOARD_LL 低层键盘钩子
10、WH_MOUSE 鼠标钩子
11、WH_MOUSE_LL 底层鼠标钩子
12、WH_SHELL 外壳钩子
13、WH_MSGFILTER 和 WH_SYSMSGFILTER 使我们可以监视菜单,滚动条,消息框等
安装钩子:
调用函数SetWindowsHookEx安装钩子。其函数原型为:
HHOOK SetWindowsHookEx( int idHook,HOOKPROC lpfn, INSTANCE hMod,DWORD dwThreadId )
idHook表示钩子类型,它是和钩子函数类型一一对应的。如,WH_KEYBOARD,WH_MOUSE。
Lpfn是钩子函数的地址。
HMod是钩子函数所在的实例的句柄。对于线程钩子,该参数为NULL;对于系统钩子,该参数为钩子函数所在的DLL句柄。 (系统钩子必须在DLL中)
dwThreadId 指定钩子所监视的线程的线程号。对于全局钩子,该参数为NULL。
SetWindowsHookEx返回所安装的钩子句柄。
卸载钩子
调用函数 BOOL UnhookWindowsHookEx( HHOOK hhk)卸载钩子
定义钩子函数
钩子函数是一种特殊的回调函数。钩子监视的特定事件发生后,系统会调用钩子函数进行处理。一般为下:
LRESULT WINAPI MyHookProc(int nCode ,WPARAM wParam,LPARAM lParam)
参数wParam和 lParam包含所钩消息的信息,比如鼠标位置、状态,键盘按键等。nCode包含有关消息本身的信,比如是否从消息队列中移出。
实例:
(转载自http://zw.NSEaC.com科教作文网)
1,进入向导,新建MFC AppWizard(dll) 取名为GetPass,选择MFC Extension DLL,完成。
2,新建一个CGetPassHook 类,基类:CObject,并加入StartHook,StopHook,函数,如下:
class AFX_EXT_CLASS CGetPassHook : public CObject
{
public:
BOOL StopHook();
BOOL StartHook(HWND hwnd);
CGetPassHook();
virtual ~CGetPassHook();
};
3:加入全局共享数据,如下:
#pragma data_seg("ShareData")
HHOOK hKeyBoardHook=NULL; file://keyboar hook
HHOOK hMouseHook=NULL; file://mouse hook
HINSTANCE glhInstance=NULL; file://globle instance
HWND hOutPutWnd=NULL; file://Display Pass Wnd
#pragma data_seg()
4:加入鼠标,键盘钩子处理函数,如下:
LRESULT WINAPI MouseHookProc(int nCode,WPARAM wParam ,LPARAM lParam)
{ file://鼠标钩子得理函数
LPMOUSEHOOKSTRUCT lpMouse=(MOUSEHOOKSTRUCT FAR*)lParam;
if(nCode