VC中遍历目标进程中的模块 MFC代码win32 也可以用 在下面代码进行修改转换就可以了CString strModule; 可以换成 char* 但是MODULEENTRY32结构中的szModule是WCHAR 由于博主基础知识较差 所以使用的MFC里的Cstring函数
#include <Tlhelp32.h> /***************************************************/ /* 函数: 查找目标进程中是否有指定模块信息 /* 参数:DWORD 目标进程ID /* 参数:char* 指定模块名称 例如"ntdll.dll" /* 返回: 无 /* 创建人: 日期 内容 /* 金胖胖 2015年2月25日 新建 /***************************************************/ bool CUIConsoleDlg::GetAllModules(DWORD dWProcessId,char* szModuleName) { CString strModule; BOOL bFound = FALSE; HANDLE hModuleSnap = NULL; MODULEENTRY32 me32 = {0}; hModuleSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dWProcessId); if(hModuleSnap == INVALID_HANDLE_VALUE) { return false; } me32.dwSize = sizeof(MODULEENTRY32); if(::Module32First(hModuleSnap, &me32)) { do { strModule.Format("%s",me32.szModule); if (!strcmp(szModuleName,strModule.GetBuffer())) // 如果找到则返回true { ::CloseHandle(hModuleSnap); return true; } } while(::Module32Next(hModuleSnap,&me32)); } ::CloseHandle(hModuleSnap); return false; } /***************************************************/ /* 函数: 测试按钮函数 /* 返回: 无 /* 创建人: 日期 内容 /* 金胖胖 2015年2月25日 新建 /***************************************************/ void CUIConsoleDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 this->m_list.DeleteAllItems(); DWORD dwID = ::GetCurrentProcessId(); if (this->GetAllModules(dwID,"GameHelpMfcDll.dll")) { AfxMessageBox("找到模块了"); } else { AfxMessageBox("没找到模块"); }
时间: 2024-10-10 22:02:28