论文无忧网提供:计算机毕业论文范文|计算机毕业设计|计算机毕业论文
栏目导航 ASP Java Web .NET VB6.0 JAVA VC VF DELPHI PB 计算机网络 计算机科学与技术 PHP 安卓APP 其他 C# 代写论文
当前位置: > 计算机 > 计算机科学与技术 >

windows进程管理工具设计与实现(论文+程序)

图7 进程基本信息的获取

进程CPU使用率是使用Windows NT以上系统提供的性能监视器取得。Windows性能监视器所用的编程接口是以性能数据助手库(PDH.dll)及一系列 C/C++头文件(即pdh.h、pdhmsg.h和winperf.h,它们是操作系统附带的)的形式公开给用户的。部分主要代码如下: copyright paper51.com

PDH_STATUS pdhStatus;

http://www.paper51.com

PDH_FMT_COUNTERVALUE fmtValue; paper51.com

pdhStatus = PdhCollectQueryData(m_hQuery);//收集数据 copyright paper51.com

pdhStatus =PdhGetFormattedCounterValue( copyright paper51.com

   hCounter,PDH_FMT_LONG,&dwctrType,&fmtValue);//得到格式化数据,fmtValue即是我们需要得到的CPU使用率数据。

copyright paper51.com

Windows 9X系统上不能通过以上方法获得CPU使用率,因此设计的该进程管理软件不能获取9X系统上进程的CPU使用率。 内容来自www.paper51.com

要得到进程的内存使用率要用到Psapi.dll的函数GetProcessMemoryInfo,首先在Process.h 中定义WINAPI函数类型:

paper51.com

GETPROCESSMEMORYINFOGetProcessMemoryInfo;,再取得内存使用数:

copyright paper51.com

PROCESS_MEMORY_COUNTERS pmc;

内容来自www.paper51.com

GetProcessMemoryInfo(hProcess,&pmc,sizeof(pmc));

http://www.paper51.com

dwMemoryUse = pmc.WorkingSetSize;//内存使用大小 paper51.com

pmc返回进程的内存使用信息,它是定义的一个PROCESS_MEMORY_COUNTERS结构,定义如下:

paper51.com

typedef struct_PROCESS_MEMORY_COUNTERS{

http://www.paper51.com

   DWORD cb;

paper51.com

   DWORD PageFaultCount;//结构尺寸 内容来自论文无忧网 www.paper51.com

   SIZE_T PeakWorkingSetSize;//缺页数

http://www.paper51.com

   SIZE_T WorkingSetSize;//当前工作集尺寸

http://www.paper51.com

   SIZE_T QuotaPeakPagedPoolUsage;//最高页池使用数 http://www.paper51.com

   SIZE_T QuotaPagedPoolUsage;//当前页池使用数 http://www.paper51.com

   SIZE_T QuotaPeakNonPagedPoolUsage;//最高无页池使用数 paper51.com

   SIZE_T QuotaNonPagedPoolUsage; //当前无页池使用数

内容来自www.paper51.com

   SIZE_T PagefileUsage;//当前分配页文件空间

内容来自论文无忧网 www.paper51.com

   SIZE_T PeakPagefileUsage;//最高分配页文件空间

paper51.com

}PROCESS_MEMORY_COUNTERS,*PPROCESS_MEMORY_COUNTERS; 内容来自www.paper51.com

3.3.2   显示模块及线程信息

内容来自论文无忧网 www.paper51.com

模块信息有模块名、模块大小、基地址。直接通过ToolHelp API函数便可实现。主要用到的函数有: 内容来自www.paper51.com

1、hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwPID)该函数用于创建指定进程的模块快照。

http://www.paper51.com

2、Module32First(hModuleSnap,&me32);该函数获取指定进程的第一个模块信息,将取得的信息填充到me32中。me32是一个MODULEENTRY32结构类型,对它的定义如下:

http://www.paper51.com

Typedef struct tagMODULEENTRY32{

copyright paper51.com

   DWORDdwSize; http://www.paper51.com

   DWORDth32ModuleID;

http://www.paper51.com

   DWORDth32ProcessID; http://www.paper51.com

   DWORDGlblcntUsage; paper51.com

   DWORDProccntUsage; 内容来自论文无忧网 www.paper51.com

   BYTE* modBaseAddr;

paper51.com

   DWORDmodBaseSize;

内容来自www.paper51.com

   HMODULEhModule;

内容来自论文无忧网 www.paper51.com

   charszModule[MAX_MODULE_NAME32 + 1];

copyright paper51.com

   charszExePath[MAX_PATH];

copyright paper51.com

}MODULEENTRY32; copyright paper51.com

3、Module32Next(hModuleSnap,&me32)该函数获取指定进程的下一个模块信息。

http://www.paper51.com

线程信息包括线程ID和线程优先级,也是通过ToolHelpAPI函数取得。

内容来自www.paper51.com

1、hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);该函数创建指定进程的线程快照,取得所有线程信息。 paper51.com

2、Thread32First(hThreadSnap,&te32);//取得指定进程的第一个线程信息将取得的信息填充到te32中。te32也是一个数据结构,它的定义和存放进程信息或存放模块信息的数据结构类似。

内容来自论文无忧网 www.paper51.com

typedef struct tagTHREADENTRY32{ paper51.com

   DWORDdwSize;//结构体尺寸,必须在调用前指定 内容来自论文无忧网 www.paper51.com

   DWORDcntUsage; paper51.com

   DWORDth32ThreadID;//线程ID 内容来自www.paper51.com

   DWORDth32OwnerProcessID;//创建该线程的进程ID

copyright paper51.com

   LONGtpBasePri;//基本优先级

paper51.com

   LONGtpDeltaPri;

内容来自www.paper51.com

   DWORDdwFlags;

copyright paper51.com

} THREADENTRY32,*PTHREADENTRY32; 内容来自论文无忧网 www.paper51.com

3、Thread32Next(hThreadSnap,&te32);//取得指定进程的下一个模块信息。

http://www.paper51.com

获取进程模块的过程如图8。 copyright paper51.com

copyright paper51.com

------分隔线----------------------------
联系方式