《MFC编程》:钩子函数
钩子函数简介
钩子函数是Windows消息处理机制的一部分,通过设置“钩子”,应用程序可以在系统级对所有消息、事件进行过滤,访问在正常情况下无法访问的消息。钩子的本质是一段用以处理系统消息的程序,通过系统调用,把它挂入系统。
作用
WINDOWS的钩子函数可以认为是WINDOWS的主要特性之一。利用它们,您可以捕捉您自己进程或其它进程发生的事件。通过“钩挂”,您可以给WINDOWS一个处理或过滤事件的回调函数,该函数也叫做“钩子函数”,当每次发生您感兴趣的事件时,WINDOWS都将调用该函数。
类型
一共有两种类型的钩子:局部的和远程的。
局部钩子仅钩挂您自己进程的事件。
远程的钩子还可以将钩挂其它进程发生的事件。
远程的钩子又有两种:
- 系统级的全局钩子;
- 线程级的钩子。
全局钩子函数需要定义在 DLL 中, 线程级的钩子开始比较简单。
其实,钩子函数就三个:
- 设置钩子: SetWindowsHookEx
- 释放钩子: UnhookWindowsHookEx
- 继续钩子: CallNextHookEx
在线程级的钩子中经常用到 GetCurrentThreadID 函数来获取当前线程的 ID。
MFC窗口如何创建
代码书写
-
创建一个win32程序
-
选择窗口程序,并且是一个空项目,点击“完成”
-
成功创建一个win32空项目
-
进入程序属性界面,更改字符集为多字节字符编码
-
更改使用MFC库,静态动态均可
源文件新建MFCCreate.cpp。
代码:
#include<afxwin.h>
class CMyFrameWnd : public CFrameWnd {
};
class CMyWinApp : public CWinApp {
public:
virtual BOOL InitInstance();
};
CMyWinApp theApp; // 爆破点
BOOL CMyWinApp::InitInstance() {
CMyFrameWnd* pFrame = new CMyFrameWnd;
pFrame->Create(NULL, "MFCCreate");
m_pMainWnd = pFrame;
pFrame->ShowWindow(SW_SHOW);
pFrame->UpdateWindow();
return TRUE;
}
程序使用的类的结构图: