⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 moduledlg.cpp

📁 VisualC高级编程技术精粹.rar
💻 CPP
字号:
// ModuleDlg.cpp : implementation file
//

#include "stdafx.h"
#include "ProcessMg.h"
#include "ModuleDlg.h"
#include "ProcessMgDlg.h"
#include "tlhelp32.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#include "psapi.h"
#pragma comment( lib, "psapi" )
/////////////////////////////////////////////////////////////////////////////
// CModuleDlg dialog


CModuleDlg::CModuleDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CModuleDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CModuleDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CModuleDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CModuleDlg)
	DDX_Control(pDX, IDC_LIST_MODULE, m_listctrlModule);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CModuleDlg, CDialog)
	//{{AFX_MSG_MAP(CModuleDlg)
	ON_BN_CLICKED(IDC_BUTTON_OK, OnButtonOk)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CModuleDlg message handlers

BOOL CModuleDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	// 初始化列表控件
	m_listctrlModule.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	m_listctrlModule.InsertColumn(1,_T("模块名称"),LVCFMT_CENTER,200,1);
	m_listctrlModule.InsertColumn(2,_T("模块ID"),LVCFMT_CENTER,100,1);
	CString csCID = ((CProcessMgDlg *)m_parent)->m_csCID;

    m_listctrlModule.SetTextBkColor(RGB(255, 191, 127));
    m_listctrlModule.SetTextColor(RGB(35,91,217));

	DWORD dwCID = atol(csCID);
	GetProcessModule(dwCID);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

int CModuleDlg::GetModuleMsg(DWORD dwID)
{
	MODULEENTRY32 me32;
	me32.dwSize = sizeof(MODULEENTRY32);
	HANDLE hModuleSnap;
	
	hModuleSnap =::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwID);
	if (hModuleSnap == INVALID_HANDLE_VALUE) 
	{
		return FALSE;
	}

	BOOL bRet =::Module32First(hModuleSnap,&me32);
	while (bRet)
	{
		char szMod[56];
		wsprintf(szMod,"%u",me32.th32ModuleID);
		m_listctrlModule.InsertItem(1,me32.szModule);
		m_listctrlModule.SetItemText(1,1,szMod);

		bRet =::Module32Next(hModuleSnap,&me32);			
	}
	::CloseHandle(hModuleSnap);

	return 0;
}

CString CModuleDlg::GetProcessModule(DWORD dwID)
{
	HMODULE hMod[1024];
	char Buffer[256];

	HANDLE hProcess;
	DWORD cbNeed;
	unsigned int i;
	char szModName[MAX_PATH];

	m_listctrlModule.DeleteAllItems();

	hProcess = ::OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,
		                     FALSE,
		                     dwID);
	if ( hProcess &&  EnumProcessModules(hProcess, hMod, sizeof(hMod), &cbNeed))
    {
        for ( i = 0; i <=(cbNeed / sizeof(HMODULE)); i++ )
        {        			
            if (GetModuleFileNameEx( hProcess, hMod[i], szModName,
				sizeof(szModName)))
            {
				
				m_listctrlModule.InsertItem(1,szModName);
				wsprintf(Buffer,"0x%08x",hMod[i]);
				
				m_listctrlModule.SetItemText(1,1,Buffer);

           }
        }
		CloseHandle( hProcess );
		return TRUE;
    }
	else  
	{
		CloseHandle( hProcess );
		return "NULL";
    }
}

void CModuleDlg::OnButtonOk() 
{
	// TODO: Add your control notification handler code here
	OnOK();	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -