作者 : 卿笃军
问题由来:一般编写钩子程序,我们希望程序一方面能屏蔽键盘鼠标消息,但又希望程序能留有一个“后门”,例如,按下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将其初始化。
钩子编程(HOOK) 留后门与钩子卸载
时间: 2024-10-10 02:38:41