钩子编程(HOOK) 安装进程内鼠标钩子 (0)

摘要:钩子函数,Windows的钩子函数可以认为是Windows的主要特性之一。利用它们,您可以捕捉您自己进程或其它进程发生的事件。通过“钩挂”,您可以给Windows一个处理或过滤事件的回调函数,该函数也叫做“钩子函数”,当每次发生您感兴趣的事件时,Windows都将调用该函数。



下面介绍如何安装一个进程内的鼠标钩子。


Step 1:打开VC6.0,新建一个基于对话框的MFC应用程序。


Step 2:将如下代码拷贝到BOOL CInnerHookDlg::OnInitDialog()上面的位置,(注意不是拷贝到OnInitDialog()里面)

HHOOK g_hMouse = NULL;
//Hook
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam,  LPARAM lParam)
{
	return 1;
}


Step 3:在 OnInitDialog() 函数里面如下位置,复制一行如下代码~~~

	g_hMouse = SetWindowsHookEx(WH_MOUSE, MouseProc, NULL, GetCurrentThreadId());

好了,钩子安装成功~~~


Step 4:运行程序,你会发现,鼠标点击事件已经被屏蔽掉了~
钩子编程(HOOK) 安装进程内鼠标钩子 (0)_第1张图片


所谓进程内钩子,就是当你的鼠标在该程序界面所在范围内,才会失效。一旦出了它的范围,就不是该Program所能控制的了。后续的文章中,将介绍全局Hook....


关于SetWindowsHookEx知识点拓展总结,


SetWindowsHookEx()函数用来安装钩子。Windows有个消息Queue,所有系统产生的消息都会在里面排队,有点类似于火车站安检口的情形。这里,Windows为了对消息有更多的控制,就产生了Hook编程。

使用SetWindowsHookEx()函数,在消息队列中安插一个检察官,对所有通过的小朋友进行身体检查,一旦发现小朋友身体状况不适,立即采取相关措施。


其中参数如下(其返回值是该钩子的句柄):


SetWindowsHookEx(

int idHook,                 \\钩子类型

HOOKPROC lpfn,      \\回调函数地址

HINSTANCE hMod,   \\实例句柄

DWORD dwThreadId  \\线程ID

); 


钩子子程是一个回调函数,形式如下:
LRESULT CALLBACK HookProc(

int nCode,

WPARAM wParam,

LPARAM lParam

);


而关于C/C++回调函数的更多了解,可以看看这篇文章《浅谈C/C++回调函数(Callback)& 函数指针》。

你可能感兴趣的:(钩子编程(HOOK) 安装进程内鼠标钩子 (0))