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();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值