日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

發布時間:2025/4/16 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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();
}

總結

以上是生活随笔為你收集整理的VC++钩子DLL框架代码(MFC Extension DLL using shared MFC DLL)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。