首页 > 代码库 > 钩子编程(HOOK) 留后门与钩子卸载

钩子编程(HOOK) 留后门与钩子卸载

作者 : 卿笃军


问题由来:一般编写钩子程序,我们希望程序一方面能屏蔽键盘鼠标消息,但又希望程序能留有一个“后门”,例如,按下F2退出程序。


下面示例,钩子后门设计与钩子卸载:


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


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

HWND g_hWnd = NULL;        //窗口句柄
HHOOK g_hKeyboard = NULL;  //钩子句柄
//回调函数
LRESULT CALLBACK KeyboardProc(int ncode, WPARAM wParam, LPARAM lParam)
{
	if (VK_F2 == wParam) 
	{
		::SendMessage(g_hWnd,WM_CLOSE,0,0);  //发送关闭主窗口消息
		UnhookWindowsHookEx(g_hKeyboard);    //卸载钩子
	}
	return 1;
}
第三步:OnInitDialog()函数里面编写如下代码,安装钩子:

	g_hWnd = m_hWnd;     //获得当前窗口句柄
	g_hKeyboard = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId());//安装钩子

第四步:编译->链接->运行。

这里主要是要发送关闭主窗口消息,但是钩子程序又不是类里面的函数,而SendMessage()函数的第一个参数是需要一个窗口句柄,这里我们定义一个全局的窗口句柄,然后用主窗口的句柄m_hWnd将其初始化。