《MFC编程》:钩子函数

  • 《MFC编程》:钩子函数
  • 钩子函数简介
  • 作用
  • 类型
  • MFC窗口如何创建
  • 代码书写


《MFC编程》:钩子函数

钩子函数简介

钩子函数是Windows消息处理机制的一部分,通过设置“钩子”,应用程序可以在系统级对所有消息、事件进行过滤,访问在正常情况下无法访问的消息。钩子的本质是一段用以处理系统消息的程序,通过系统调用,把它挂入系统。

作用

WINDOWS的钩子函数可以认为是WINDOWS的主要特性之一。利用它们,您可以捕捉您自己进程或其它进程发生的事件。通过“钩挂”,您可以给WINDOWS一个处理或过滤事件的回调函数,该函数也叫做“钩子函数”,当每次发生您感兴趣的事件时,WINDOWS都将调用该函数。

类型

一共有两种类型的钩子:局部的和远程的。

局部钩子仅钩挂您自己进程的事件。

远程的钩子还可以将钩挂其它进程发生的事件。

远程的钩子又有两种:

  1. 系统级的全局钩子;
  2. 线程级的钩子。

全局钩子函数需要定义在 DLL 中, 线程级的钩子开始比较简单。

其实,钩子函数就三个:

  • 设置钩子: SetWindowsHookEx
  • 释放钩子: UnhookWindowsHookEx
  • 继续钩子: CallNextHookEx

在线程级的钩子中经常用到 GetCurrentThreadID 函数来获取当前线程的 ID。

MFC窗口如何创建

在钩子函数中直接修改属性 什么叫钩子函数_回调函数

在钩子函数中直接修改属性 什么叫钩子函数_mfc_02

在钩子函数中直接修改属性 什么叫钩子函数_在钩子函数中直接修改属性_03

代码书写

在钩子函数中直接修改属性 什么叫钩子函数_c++_04

  1. 创建一个win32程序
  2. 在钩子函数中直接修改属性 什么叫钩子函数_c++_05

  3. 选择窗口程序,并且是一个空项目,点击“完成”
  4. 在钩子函数中直接修改属性 什么叫钩子函数_在钩子函数中直接修改属性_06

  5. 成功创建一个win32空项目
  6. 在钩子函数中直接修改属性 什么叫钩子函数_在钩子函数中直接修改属性_07

  7. 进入程序属性界面,更改字符集为多字节字符编码
  8. 在钩子函数中直接修改属性 什么叫钩子函数_回调函数_08

  9. 更改使用MFC库,静态动态均可
  10. 在钩子函数中直接修改属性 什么叫钩子函数_钩子函数_09

源文件新建MFCCreate.cpp。

在钩子函数中直接修改属性 什么叫钩子函数_c++_10

代码:

#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;
}

程序使用的类的结构图:

在钩子函数中直接修改属性 什么叫钩子函数_钩子函数_11