Win7环境使用VC2008编写DLL实现鼠标钩子

2012-03-21 21:04:01|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:C/C++, 操作系统|来源:唯设编程网

钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。

使用钩子可以让我们的应用程序实现许多个性化的功能,VC凭借着对系统api方便调用的优势,用它来编写实现钩子的应用程序非常方便,本文将以鼠标钩子为例,详细介绍钩子在VC编程的具体使用方法。下面详细介绍VC2008+Win7环境编写一个实现了鼠标钩子DLL的详细步骤:

1. 项目设置:

启动VC2008以后,新建项目到当前解决方案,项目类型选择:Visual C++->Win32->Win32项目,在应用程序设置界面,将应用程序类型设置成DLL,在添加公共头文件以用于栏勾选MFC复选框。程序的设置如图:

VC2008编写DLL实现鼠标钩子

为了DLL导出函数的编写方便,你也可以在附加选项栏勾选导出符号。

2. 添加自定义消息ID

#define WM_HOOK_LBUTTONUP WM_USER+200

该自定义消息用于鼠标事件触发时钩子DLL将鼠标事件发送给接收消息的窗体。

3. 添加处理鼠标钩子的类CMouseHook

鼠标钩子类CMouseHook主要用于启动和停止鼠标钩子,该类继承自CObject,其头文件的完整声明如下:

#pragma once
#include "afx.h"
#define WM_HOOK_LBUTTONUP WM_USER+200 

class AFX_EXT_CLASS CMouseHook :
    public CObject
{
public:
    CMouseHook(void);
    ~CMouseHook(void);
    // 安装钩子函数
    BOOL startHook(HWND hWnd);
    // 卸载钩子函数
    BOOL stopHook(void);
};

4. 鼠标钩子的类CMouseHook类成员函数的定义

CMouseHook类的成员函数定义代码如下:

4.1 鼠标钩子类CMouseHook类的构造和析构函数:
CMouseHook::CMouseHook(void)
{
}

CMouseHook::~CMouseHook(void)
{
    stopHook();
}

构造函数没有进行任何初始化工作,不过在析构函数中不要忘记调用stopHook函数卸载鼠标钩子。

<12>
发表评论0条 】
网友评论(共?条评论)..
Win7环境使用VC2008编写DLL实现鼠标钩子