首页 > 代码库 > 钩子编程(HOOK) 安装进程内键盘钩子 (1)

钩子编程(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:编译->链接->执行:这时候你发现键盘事件已经不能响应了~~~

技术分享


当然。假设你仅仅想屏蔽掉空格键,你能够这样写,

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) 安装进程内鼠标钩子》

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