C++实现支持32位和64位进程的模块枚举
使用 Visual Studio 2022 (VC 2022) 创建 MFC 对话框应用程序支持查找32位和64位进程使用TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32同时枚举两种模块输入进程名称例如notepad.exe点击“查找进程”按钮在列表控件ListCtrl中显示该进程的所有模块名称、基址、大小、路径1. 资源部分在资源编辑器中添加控件在对话框资源ID 为IDD_GETMODULEBASE_DIALOG中添加以下控件类型IDCaption其他属性Edit ControlIDC_EDIT_PROCESS(空)ButtonIDC_BTN_SEARCH查找进程List ControlIDC_LIST_MODULES(空)View: Report, 加四列见代码StaticIDC_STATIC_TIP输入进程名如 notepad.exe2. GetModuleBaseDlg.h1234567891011121314151617181920212223242526272829#pragma once#include tlhelp32.h#include afxwin.h#include afxcmn.hclassCGetModuleBaseDlg :publicCDialogEx{public:CGetModuleBaseDlg(CWnd* pParent nullptr);enum{ IDD IDD_GETMODULEBASE_DIALOG };protected:virtualvoidDoDataExchange(CDataExchange* pDX);virtualBOOLOnInitDialog();DECLARE_MESSAGE_MAP()public:afx_msgvoidOnBnClickedBtnSearch();private:DWORDGetProcessIDByName(LPCTSTRlpProcessName);BOOLGetAllModules(DWORDdwPID, CListCtrl listCtrl);CEdit m_editProcess;CButton m_btnSearch;CListCtrl m_listModules;};3. GetModuleBaseDlg.cpp123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129#include pch.h#include GetModuleBase.h#include GetModuleBaseDlg.h#include afxdialogex.h#ifdef _DEBUG#define new DEBUG_NEW#endifCGetModuleBaseDlg::CGetModuleBaseDlg(CWnd* pParent/*nullptr*/): CDialogEx(IDD_GETMODULEBASE_DIALOG, pParent){}voidCGetModuleBaseDlg::DoDataExchange(CDataExchange* pDX){CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_EDIT_PROCESS, m_editProcess);DDX_Control(pDX, IDC_BTN_SEARCH, m_btnSearch);DDX_Control(pDX, IDC_LIST_MODULES, m_listModules);}BEGIN_MESSAGE_MAP(CGetModuleBaseDlg, CDialogEx)ON_BN_CLICKED(IDC_BTN_SEARCH, CGetModuleBaseDlg::OnBnClickedBtnSearch)END_MESSAGE_MAP()BOOLCGetModuleBaseDlg::OnInitDialog(){CDialogEx::OnInitDialog();// 设置列表控件为报告视图并添加列m_listModules.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);m_listModules.InsertColumn(0, _T(模块名称), LVCFMT_LEFT, 150);m_listModules.InsertColumn(1, _T(基址), LVCFMT_LEFT, 120);m_listModules.InsertColumn(2, _T(大小), LVCFMT_LEFT, 100);m_listModules.InsertColumn(3, _T(路径), LVCFMT_LEFT, 400);returnTRUE;}// 根据进程名获取 PID支持大小写不敏感DWORDCGetModuleBaseDlg::GetProcessIDByName(LPCTSTRlpProcessName){DWORDdwPID 0;HANDLEhSnapshot CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if(hSnapshot INVALID_HANDLE_VALUE)return0;PROCESSENTRY32 pe32 {sizeof(pe32) };if(Process32First(hSnapshot, pe32)){do{if(_tcsicmp(pe32.szExeFile, lpProcessName) 0)// 不区分大小写{dwPID pe32.th32ProcessID;break;}}while(Process32Next(hSnapshot, pe32));}CloseHandle(hSnapshot);returndwPID;}// 枚举指定进程的所有模块同时支持 32/64 位模块BOOLCGetModuleBaseDlg::GetAllModules(DWORDdwPID, CListCtrl listCtrl){listCtrl.DeleteAllItems();// 同时使用 TH32CS_SNAPMODULE 和 TH32CS_SNAPMODULE32 可兼容 WOW64 进程的 32 位模块HANDLEhSnapshot CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, dwPID);if(hSnapshot INVALID_HANDLE_VALUE)returnFALSE;MODULEENTRY32 me32 {sizeof(me32) };if(Module32First(hSnapshot, me32)){intnItem 0;do{CString strBase, strSize;strBase.Format(_T(0x%016I64X), (ULONGLONG)me32.modBaseAddr);strSize.Format(_T(0x%08X), me32.modBaseSize);listCtrl.InsertItem(nItem, me32.szModule);listCtrl.SetItemText(nItem, 1, strBase);listCtrl.SetItemText(nItem, 2, strSize);listCtrl.SetItemText(nItem, 3, me32.szExePath);nItem;}while(Module32Next(hSnapshot, me32));}CloseHandle(hSnapshot);returnTRUE;}voidCGetModuleBaseDlg::OnBnClickedBtnSearch(){CString strProcessName;m_editProcess.GetWindowText(strProcessName);strProcessName.Trim();if(strProcessName.IsEmpty()){AfxMessageBox(_T(请输入进程名称));return;}DWORDdwPID GetProcessIDByName(strProcessName);if(dwPID 0){AfxMessageBox(_T(未找到指定进程请确认进程名称正确包含.exe且进程正在运行。));m_listModules.DeleteAllItems();return;}CString strTitle;strTitle.Format(_T(进程 %s (PID: %u) 的模块列表), strProcessName, dwPID);SetWindowText(strTitle);if(!GetAllModules(dwPID, m_listModules)){AfxMessageBox(_T(枚举模块失败可能没有足够权限。));m_listModules.DeleteAllItems();}}4. 项目配置VS2022项目使用Unicode字符集。使用 MFC项目属性 → 常规 → 使用 MFC → “在共享 DLL 中使用 MFC” 或 “在静态库中使用 MFC”。5.使用方法运行程序在编辑框输入进程可执行文件名例如notepad.exe、chrome.exe点击“查找进程”列表中会显示该进程加载的所有模块包括主模块和 DLL这样就完整实现了你要求的功能支持 32 位和 64 位进程的模块枚举。

相关新闻

yuzu模拟器完整指南:如何在PC上高效运行Switch游戏的实用方案

yuzu模拟器完整指南:如何在PC上高效运行Switch游戏的实用方案

yuzu模拟器完整指南:如何在PC上高效运行Switch游戏的实用方案 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu 想要在Windows、Linux或Android设备上体验任天堂Switch游戏?yuzu模拟器提供了完…

2026/7/2 23:43:38阅读更多 →
Web安全学习指南:从漏洞原理到工具实战的系统化路径

Web安全学习指南:从漏洞原理到工具实战的系统化路径

1. 项目概述:为什么我们需要一份新的Web安全学习指南?在信息安全这个行当里干了十几年,我见过太多人想学Web安全,却一头扎进各种零散的教程、工具和漏洞复现里,最后学了个一知半解,遇到真实场景还是无从下手…

2026/7/2 23:43:38阅读更多 →
Turbo Intruder:高性能HTTP模糊测试与安全审计实战指南

Turbo Intruder:高性能HTTP模糊测试与安全审计实战指南

1. 项目概述:为什么我们需要Turbo Intruder?如果你做过Web安全测试,尤其是渗透测试或者漏洞挖掘,那你肯定对Burp Suite的Intruder模块又爱又恨。爱的是它功能强大,能自动化完成各种参数爆破、模糊测试;恨的…

2026/7/2 23:43:38阅读更多 →
Python 零基础入门:运算符、格式化输出与字符编码全解(避坑版)

Python 零基础入门:运算符、格式化输出与字符编码全解(避坑版)

Python 零基础入门:运算符、格式化输出与字符编码全解(避坑版) 摘要 本文面向纯零基础学习者,系统拆解Python三大核心基础:格式化输出全用法、全品类运算符与优先级、字符编码底层原理。全文附带可直接运行的示例代码、…

2026/7/3 1:03:45阅读更多 →
Multimodal-CoT:多模态思维链的工程落地与工业实践

Multimodal-CoT:多模态思维链的工程落地与工业实践

1. 什么是真正的“思维链”——不是技巧,而是认知建模的底层迁移你有没有试过让ChatGPT解一道初中物理题,比如“一个质量为2kg的物体从10米高处自由下落,忽略空气阻力,求落地时的速度?”——它大概率会直接套用公式 $v…

2026/7/3 1:03:45阅读更多 →
Azure Local 离线操作总览(系列篇之一)

Azure Local 离线操作总览(系列篇之一)

0. 这套文档在讲什么 Azure Local 2606 开始提供官方支持的 Disconnected Operations部署模式:把 Azure 控制面(Portal、ARM、RBAC、Key Vault、Policy、Container Registry、AKS、Arc VM 等)的一部分搬到本地数据中心运行,让你能…

2026/7/3 1:03:45阅读更多 →
新房入住前为什么建议做一次开荒保洁?很多人入住后才后悔知道晚了

新房入住前为什么建议做一次开荒保洁?很多人入住后才后悔知道晚了

很多人觉得,新房刚装修完,看起来干干净净,只要简单拖个地、擦擦灰就能入住。实际上,新房真正需要处理的,并不是表面的灰尘,而是装修过程中残留的大量细小污染物。因此,不少装修公司和家政从业者…

2026/7/3 1:03:45阅读更多 →
为什么使用命令eval “$(ssh-agent -s)“启动ssh-agent而不是直接启动?(ssh-agent bash)

为什么使用命令eval “$(ssh-agent -s)“启动ssh-agent而不是直接启动?(ssh-agent bash)

文章目录为什么使用命令eval "$(ssh-agent -s)"启动ssh-agent而不是直接启动?为什么需要 eval "$(ssh-agent -s)"?1. **ssh-agent 需要设置环境变量**2. **eval 的作用**3. **如果直接启动会怎样?**对比说明其他启动方式…

2026/7/3 1:03:45阅读更多 →
AI智能体工作流开发实战:从原理到应用

AI智能体工作流开发实战:从原理到应用

1. 为什么工作流是AI智能体的核心能力在AI应用开发领域,工作流技术正在彻底改变我们构建智能体的方式。传统基于单轮对话的AI系统就像一台只能执行简单指令的计算器,而搭载工作流的智能体则相当于配备了完整操作系统的计算机。1.1 工作流的本质解析工作流…

2026/7/3 0:58:45阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/2 12:10:34阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/2 12:10:34阅读更多 →
LV3296与PIC18F45K22的UART通信与USB扩展方案

LV3296与PIC18F45K22的UART通信与USB扩展方案

1. LV3296与PIC18F45K22的硬件搭档解析在嵌入式数据采集系统中,LV3296条形码扫描模块与PIC18F45K22微控制器的组合堪称经典搭配。LV3296作为一款工业级条码扫描头,其核心是一颗高性能CMOS图像传感器,配合专用解码芯片,能自动识别包…

2026/7/3 0:03:41阅读更多 →
AI初创生存指南:6个月完成可信度验证闭环

AI初创生存指南:6个月完成可信度验证闭环

1. 这不是“逆袭指南”,而是一份AI初创公司真实生存手记“How To Beat Odds As an AI Startup?”——这个标题乍看像一句热血口号,但在我带过7个从0到1的AI产品团队、亲手踩过融资失败、技术债崩盘、客户POC卡在最后一公里等23类典型坑之后,…

2026/7/3 0:03:41阅读更多 →
多模态+推理链+RAG 2.0+智能体:工业级AI系统落地四支柱

多模态+推理链+RAG 2.0+智能体:工业级AI系统落地四支柱

1. 这不是又一篇“AI趋势速览”,而是一份实操者手记:当多模态、推理链、检索增强与智能体协作真正撞进工程现场“LAI #73”这个编号本身就像一个暗号——它不属于某家大厂的白皮书,也不是学术会议的议程表,而是长期泡在模型训练集…

2026/7/3 0:03:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/2 0:33:58阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/2 1:32:11阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/2 1:50:13阅读更多 →