枚举进程模块

xiaoxiao2021-02-28  81

枚举进程模块

使用 CreateToolhelp32Snapshot 创建进程快照,第一个参数为 TH32CS_SNAPMODULE 时创建进程模块快照,类似枚举进程时使用的 Process32First、Process32Next,枚举进程模块时使用 Module32First、Module32Next 枚举进程模块。

代码: CEnumModuleDlg:

BEGIN_MESSAGE_MAP(CEnumModuleDlg, CDialogEx) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_DLL, &CEnumModuleDlg::OnBnClickedDll) END_MESSAGE_MAP() // CEnumModuleDlg 消息处理程序 BOOL CEnumModuleDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 CRect rect; m_list.GetWindowRect(&rect); m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); m_list.InsertColumn(0, _T("进程ID"), LVCFMT_LEFT, rect.Width() / 4, 0); m_list.InsertColumn(1, _T("进程名"), LVCFMT_LEFT, 3*rect.Width() / 5, 1); PROCESSENTRY32 pe; auto handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (handle != INVALID_HANDLE_VALUE) { pe.dwSize = sizeof(PROCESSENTRY32); if (!Process32First(handle, &pe)) return FALSE; CString s; int item = 0; while (TRUE) { pe.dwSize = sizeof(PROCESSENTRY32); if (!Process32Next(handle, &pe)) break; s.Format(_T("%u"), pe.th32ProcessID); m_list.InsertItem(item, s); m_list.SetItemText(item, 1, pe.szExeFile); ++item; } CloseHandle(handle); } return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CEnumModuleDlg::OnBnClickedDll() { auto pos = m_list.GetFirstSelectedItemPosition(); if (pos) { int item = m_list.GetNextSelectedItem(pos); if (item > -1) { CString sPid = m_list.GetItemText(item, 0); int pId = _ttoi(sPid); if (pId > 0) { CEnumDllDlg dlg; dlg.m_pID = pId; dlg.DoModal(); } } } }

CEnumDllDlg:

BEGIN_MESSAGE_MAP(CEnumDllDlg, CDialogEx) END_MESSAGE_MAP() // CEnumDllDlg 消息处理程序 BOOL CEnumDllDlg::OnInitDialog() { CDialogEx::OnInitDialog(); CRect rect; m_list.GetWindowRect(&rect); m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); m_list.InsertColumn(0, _T("DLL名"), LVCFMT_LEFT, rect.Width() / 5, 0); m_list.InsertColumn(1, _T("DLL路径"), LVCFMT_LEFT, 15 * rect.Width() / 20, 1); MODULEENTRY32 module = { 0 }; module.dwSize = sizeof(MODULEENTRY32); HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, m_pID); if (hSnap != INVALID_HANDLE_VALUE) { BOOL ret = Module32First(hSnap, &module); int item = 0; CString s; while (ret) { m_list.InsertItem(item, module.szModule); m_list.SetItemText(item, 1, module.szExePath); ++item; ret = Module32Next(hSnap, &module); } CloseHandle(hSnap); } return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE }

效果:

代码链接: http://download.csdn.net/download/yangyang031213/9895681. https://github.com/yangyang0312/cpp/tree/master/windows/EnumModule

转载请注明原文地址: https://www.6miu.com/read-81904.html

最新回复(0)