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

来源:互联网 发布:辽宁农产品价格数据 编辑:程序博客网 时间:2024/06/05 20:32

作者 : 卿笃军


问题由来:一般编写钩子程序,我们希望程序一方面能屏蔽键盘鼠标消息,但又希望程序能留有一个“后门”,例如,按下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将其初始化。


1 0
原创粉丝点击