钩子编程(HOOK) 安装进程内键盘钩子 (1)

摘要:钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,屏幕取词,日志监视等等。



下面演示如何安装进程内键盘钩子,


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


Step 2:在BOOL CHookDlg::OnInitDialog()函数上面编写如下代码:(注意是在上面编写,不是在OnInitDialog()里面)

HHOOK g_hKeyboard = NULL;

LRESULT CALLBACK KeyboardProc(int ncode, WPARAM wParam, LPARAM lParam)
{
	return 1;
}


Step 3:在OnInitDialog()函数里面安装键盘钩子,复制粘贴如下代码,

g_hKeyboard = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId());


Step 4:编译->链接->运行:这时候你发现键盘事件已经不能响应了~~~

钩子编程(HOOK) 安装进程内键盘钩子 (1)_第1张图片


当然,如果你只想屏蔽掉空格键,你可以这样写,

LRESULT CALLBACK KeyboardProc(int ncode, WPARAM wParam, LPARAM lParam)
{
	if (VK_SPACE == wParam)
		return 1;
	else
		return CallNextHookEx(g_hKeyboard, ncode, wParam, lParam);
}


如果按下的是空格键,直接返回,告诉系统,该消息已执行。否则将消息传给下一个钩子~~~

还有一种就是,需要屏蔽一些组合键,比如:Alt+F4,可以用如下方式实现,

LRESULT CALLBACK KeyboardProc(int ncode, WPARAM wParam, LPARAM lParam)
{
	if (VK_F4 == wParam || (1 == (lParam>>29 & 1)))
		return 1;
	else
		return CallNextHookEx(g_hKeyboard, ncode, wParam, lParam);
}


lParam参数各位的含义如下:

钩子编程(HOOK) 安装进程内键盘钩子 (1)_第2张图片

想了解更多关于进程内钩子,可以阅读这篇文章《钩子编程(HOOK) 安装进程内鼠标钩子》

你可能感兴趣的:(钩子编程(HOOK) 安装进程内键盘钩子 (1))