VC++深入详解(18):钩子函数

本文介绍了如何在VC++中利用钩子函数实现特定功能,如在对话框应用程序中设置钩子以在OnInitDialog初始化,并通过钩子处理键盘事件,特别是屏蔽除F2键之外的所有按键。当按下F2时,程序会退出。讨论了如何在不同窗口下捕捉F2键,并提及了设置共享节属性的不同方法,包括使用#pragma comment和在模块定义文件中设定。
摘要由CSDN通过智能技术生成
什么是HOOK编程?
这得从Windows消息机制说起:当在应用程序窗口内点击鼠标左键时,操作系统会感知这一事件,然后把消息放到应用程序的消息响应队列中,应用程序通过GetMessage读取消息,然后通过DispatchMessage将消息调度给操作系统,操作系统会调用在设计窗口类时指定的应用程序窗口过程函数对消息进行处理。
假如我们希望对某个特殊的消息进行屏蔽,比如希望这个应用程序不响应回车和空格消息,就需要截获所有消息,然后进行判断,如果是这两种消息,则将它们屏蔽掉。为了实现这个功能,我们可以安装一个HOOK过程,在此过程中检查,再决定是否放行该消息。

我们先看代码。在对话框应用程序的OnInitDialog中设置一个钩子过程:

	g_hMouse = SetWindowsHookEx(WH_MOUSE,				//截获鼠标消息
								MouseProc,				//钩子函数
								NULL,					//指定的线程
								GetCurrentThreadId())	//当前线程

其中g_hMouse是用来存放钩子过程句柄的全局变量函数,而MouseProc则是与鼠标消息相对应的钩子函数,如果这个函数返回非0值,则表示以对其进行了处理,系统将不会把这消息传递给窗口过程函数了。我们这里只是简单地让其返回1:

LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam,  LPARAM lParam)
{
	return 1;
}
我们运行一下程序,发现当鼠
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值