`

VC++钩子DLL框架代码(MFC Extension DLL using shared MFC DLL)

阅读更多

// HookDllDemo.cpp : Defines the initialization routines for the DLL.
//

#include "stdafx.h"
#include <afxdllx.h>

#include <windows.h> //引入windows头文件

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

// 建立数据段
#pragma data_seg("HookData")
HHOOK g_hHook = NULL; // 钩子句柄
HINSTANCE g_hInstDLL = NULL; // 模块句柄
#pragma data_seg()
//设置数据段为可读可写可共享
#pragma comment(linker,"/SECTION:HookData,RWS")

static AFX_EXTENSION_MODULE HookDllDemoDLL = { NULL, NULL };

extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)//入口函数
{
// Remove this if you use lpReserved
UNREFERENCED_PARAMETER(lpReserved);

if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("HOOKDLLDEMO.DLL Initializing!\n");

// Extension DLL one-time initialization
if (!AfxInitExtensionModule(HookDllDemoDLL, hInstance))
return 0;

// Insert this DLL into the resource chain
// NOTE: If this Extension DLL is being implicitly linked to by
// an MFC Regular DLL (such as an ActiveX Control)
// instead of an MFC application, then you will want to
// remove this line from DllMain and put it in a separate
// function exported from this Extension DLL. The Regular DLL
// that uses this Extension DLL should then explicitly call that
// function to initialize this Extension DLL. Otherwise,
// the CDynLinkLibrary object will not be attached to the
// Regular DLL's resource chain, and serious problems will
// result.

new CDynLinkLibrary(HookDllDemoDLL);

g_hInstDLL = hInstDLL; // 初始化模块句柄


}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("HOOKDLLDEMO.DLL Terminating!\n");
// Terminate the library before destructors are called
AfxTermExtensionModule(HookDllDemoDLL);
}
return 1; // ok
}

// 钩子回调函数
LRESULT WINAPI HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
// TODO: 在这里添加响应动作

// 将事件传递到下一个钩子
return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}

// 安装钩子
extern "C" __declspec(dllexport) DWORD InstallHook(void)
{
DWORD dwRet = 0;
/*加载钩子类别*/
g_hHook = SetWindowsHookEx(WH_MOUSE/*WH_SHELL*/, HookProc, g_hInstDLL, 0);
if(g_hHook == NULL)
dwRet = GetLastError();
return dwRet;
}

// 卸载钩子
extern "C" __declspec(dllexport) DWORD KillHook(void)
{
if(UnhookWindowsHookEx(g_hHook))
return 0;
else
return GetLastError();
}

分享到:
评论

相关推荐

    MFC 调用全局钩子DLL

    在这个场景中,我们将探讨如何使用MFC调用全局钩子DLL。 首先,全局钩子是通过创建一个动态链接库(DLL)实现的,这个DLL包含一个或多个钩子函数。钩子函数是Windows API中的回调函数,当特定的事件发生时,操作...

    VC++使用dll注入实现全局键盘钩子

    DLL注入是将DLL代码加载到目标进程中,使得DLL中的函数可以直接在目标进程中执行,从而实现对目标进程的控制,比如设置键盘钩子。 首先,我们需要创建一个DLL项目,这个DLL将包含我们的键盘钩子逻辑。在DLL中,我们...

    VC++钩子函数

    ### 钩子函数在VC++中的应用 #### 一、引言 在软件开发过程中,特别是对于Windows应用程序而言,钩子(Hook)技术是一种非常有用的工具,它能够帮助开发者捕获并处理系统级的消息。钩子机制允许程序将一个钩子函数...

    vc++6 MFC 全局钩子(屏幕坐标显示)

    **VC++6与MFC全局钩子:屏幕坐标显示** 在Windows编程中,全局钩子是一种强大的技术,它允许开发者监控系统级别的事件,如键盘、鼠标等输入事件。本示例是利用VC++6和MFC(Microsoft Foundation Classes)实现了一...

    MFC\VC++ 键盘钩子

    编译环境:VS2015 ;...框架:MFC基于对话框的应用程序;功能:利用回调函数写的一个全局的键盘钩子,可以捕获大部分的键盘输入。本来不想要分的,结果好像现在最低分就是2分。一个很简单的例子,供需要的人参考学习

    MFC钩子程序编写的钩子程序

    在MFC钩子程序中,DLL通常用于存放钩子处理函数,因为钩子函数需要在全局范围内有效,而DLL可以跨进程提供这样的全局性。 在实际编写MFC钩子程序时,你需要了解以下关键点: 1. **安装钩子**: 使用`...

    全局鼠标钩子DLL源码及调用源码

    这篇资源提供了一套全局鼠标钩子DLL(动态链接库)的源码和调用源码,旨在帮助初级程序员理解并实践这一技术。 首先,我们需要了解什么是全局鼠标钩子。在Windows操作系统中,钩子是一种机制,通过它,一个应用程序...

    易语言DLL钩子原代码.rar

    易语言DLL钩子原代码是关于使用易语言编程实现DLL动态链接库中的钩子技术的实践示例。在Windows操作系统中,钩子是一种系统机制,允许应用程序监视和处理特定事件,如键盘输入、鼠标动作或者窗口消息。DLL钩子则是...

    键盘钩子DLL

    这个示例可能演示了如何创建、安装、使用和卸载键盘钩子DLL,以及如何在VC++项目中集成和调用这些功能。 总结来说,键盘钩子DLL是通过DLL和Windows钩子机制实现的键盘事件捕获技术。开发者可以利用这项技术进行键盘...

    VC++ 钩子程序的编写 很危险 小心使用

    VC++ 钩子程序的编写 很危险 小心使用 再次提醒你,小心使用,会有不可预料的后果

    VC++钩子函数共5页.pdf.zip

    【VC++钩子函数】是Windows编程中一个重要的技术,它允许程序员在系统或应用程序的特定事件发生时插入自定义代码。钩子函数是通过安装钩子来实现的,这会使得系统在处理特定消息或者事件之前,先执行我们设置的代码...

    易语言源码DLL钩子原代码.rar

    易语言源码DLL钩子原代码.rar 易语言源码DLL钩子原代码.rar 易语言源码DLL钩子原代码.rar 易语言源码DLL钩子原代码.rar 易语言源码DLL钩子原代码.rar 易语言源码DLL钩子原代码.rar

    MFC dll注入框架.zip

    在这个"**MFC dll注入框架.zip**"中,我们关注的是DLL注入技术,这是一种在计算机程序中动态加载和执行自定义代码的方法,常用于调试、性能监控、恶意软件等场景。 DLL(Dynamic Link Library)是Windows操作系统中...

    DLL注入工具(进程注入,API,VC++)

    DLL注入就是将一个DLL文件的代码强制加载到另一个正在运行的进程的地址空间中,使得目标进程能够执行DLL中定义的函数,而无需修改目标程序的源代码。 1. **进程注入**:进程注入是DLL注入的核心技术。通过API函数如...

    低级键盘钩子(免DLL注入)dota改键源码+总结(MFC)

    在本文中,我们将深入探讨如何使用MFC(Microsoft Foundation Classes)框架实现一个免DLL注入的低级键盘钩子,并探讨其工作原理。 首先,让我们了解什么是键盘钩子。键盘钩子分为两种:低级和高级。低级键盘钩子...

    VC下实现全局钩子源代码

    在VC++环境下,实现全局钩子通常涉及创建一个动态链接库(DLL)来承载钩子处理函数,并在主应用程序中加载这个DLL以安装钩子。下面将详细解释如何在VC++下实现全局钩子以及相关的知识点。 首先,我们需要理解全局...

    安装钩子DLL.e

    安装钩子DLL.e

    易语言钩子DLL注入

    在易语言中,"钩子DLL注入"是一个重要的技术概念,主要涉及到系统级的监控与控制。 钩子(Hook)是Windows操作系统提供的一种机制,允许程序员在系统事件发生时执行特定的代码,如键盘输入、鼠标点击等。通过设置...

    钩子DLL源码

    在IT领域,"钩子DLL源码"是一个与系统编程和Windows API紧密相关的主题。钩子(Hook)是Windows操作系统提供的一种机制,允许程序监视和处理特定事件,如键盘输入、鼠标点击等,甚至可以影响其他应用程序的行为。DLL...

    VC++ API钩子 附含源代码

    在这个案例中,"VC++ API钩子 附含源代码" 提供了一种利用detoured.dll动态链接库来隐藏注册表键值的方法。Detoured.dll是一个强大的工具,它提供了钩子功能,可以方便地替换或“钩住”系统API,进而实现在其执行...

Global site tag (gtag.js) - Google Analytics