65.9K
CodeProject 正在变化。 阅读更多。
Home

进程枚举类

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.50/5 (6投票s)

2007年6月6日

CPOL

2分钟阅读

viewsIcon

26942

downloadIcon

1130

该类可用于枚举进程和模块。

Screenshot - image.jpg

引言

本文介绍如何枚举当前正在运行的进程以及枚举特定进程中加载的模块。 提供了两个类用于这些枚举。

问题

在某些软件的开发过程中,我们需要关于进程和模块的许多信息。 这个类可以帮助做到这一点(例如,如果我们需要进程或模块的版本信息,这个文件类可以帮助你)。

基本用法

此类公开了用于枚举进程以及进程模块的完整接口。

有两个类,CEnumProcessListCModuleInfoCEnumProcessList 枚举进程和模块,您可以使用 CModuleInfo 类查询模块信息。

CEnumProcessList 类作为公共方法公开的函数包括

不支持。 函数名 描述
1 CEnumProcessList

这是默认构造函数,它枚举系统中所有正在运行的进程。

2 CEnumProcessList(DWORD dwProcessID);

此构造函数将进程 ID 作为参数,并创建与该进程相关的已加载模块的列表。

3 BOOL GetModuleVersion(CString ModuleName,CString &VersionString);

返回传递给该函数的进程/模块的版本。 您必须根据列表查询版本。

4 BOOL SearchProcessOrModule(CString ModuleName,CModuleDetails* pModuleData);

您可以使用此函数搜索进程或模块。

5 BOOL HasFailed(); 返回状态是否指示失败。
6 POSITION GetHeadPosition();
7 CModuleDetails* GetNext(POSITION &Pos); 获取列表中的下一个位置。
8 DWORD LastError(); 返回在处理进程或模块时发生的最后一个错误。
9 static CString FormatError(DWORD dwError); 返回格式化的错误。

类的工作原理

顾名思义,当我们使用默认构造函数创建一个 CEnumProcessList 对象时,该类使用 EnumProcesses 函数枚举系统中当前正在运行的进程,并将它们作为 CModuleInfo 对象列出。 该类使用 CModuleInfo 类来存储进程信息。

现在,我们可以使用像 GetHeadPosition 这样的函数查询该类,以从列表中获取元素。 要获取进程加载的所有模块的列表,我们必须使用该类的另一个构造函数,并将进程 ID 作为参数。 此函数将生成进程加载的所有模块的列表。

在您的应用程序中使用此类

您需要在您的项目中添加 ProcListP.hProcListP.CPP 文件。 现在,这取决于您想要在哪里使用该类。 该类可以如下使用

//To get the list of all processes
CEnumProcessList * m_listp = new CEnumProcessList;
//This will genrate the list of all processes

for(POSITION modulePos = m_listp->GetHeadPosition();modulePos!=NULL;) 
{ 
    CModuleDetails* pModuleData = new CModuleDetails;
    pModuleData = m_listp->GetNext(modulePos); 
    //You can use it to extarct all the informatio about the process
}

//To genrate the list of all modules of a process

CEnumProcessList * m_listp =  newCEnumProcessList(pModuleInfo->pProcessID);
for(POSITION modulePos1 = m_listp->GetHeadPosition();modulePos1!=NULL;)
{
  CModuleDetails* pModuleData = new CModuleDetails;
  pModuleData = m_listp->GetNext(modulePos1);
 //You can use it to extarct all the informatio about the modules related to the process

}

错误代码

您可以使用该类提供的函数查询错误。

未来的改进和/或增强

  • MFC 依赖性
  • 操作系统依赖性
  • 可以为该类定义自定义错误代码。
  • 也可以实现其他方法,而不是仅使用 psapi.lib
© . All rights reserved.