网学网其他类别编辑为广大网友搜集整理了:Windows进程管理器的设计绩等信息,祝愿广大网友取得需要的信息,参考学习。
客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn |
3.1 进程列表页面设计 该页面主要实现显示当前系统正在运行的所有进程并对其进程管理,如结束进程,显示进程模块信息,显示进程线程信息,保存进程信息在网页文件中等功能。同显示任务列表一样,我们将添加两个列表控件,分别显示所有进程信息和当前选择的进程的所以模块信息,如图5。
图5 进程列表页面 3.3.1 显示进程信息 进程信息包括进程图标,进程名、进程ID、CPU使用率、内存使用率、优先级、线程数、父进程ID和进程路径等,如图6。
图6 进程信息 通过调用ToolHelp API函数可枚举所有运行的进程并取得进程路径,进程ID,父进程ID,线程数和优先级。要使用该类接口函数需要包含头文件tlhelp32.h。主要用到ToolHelp API中的以下几个函数: 1、hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);该函数用于创建一个系统进程快照,取得系统中的所有进程的信息。 2、Process32First(hProcessSnap,&pe32);该函数取得快照中第一个进程信息,pe32参数是一个PROCESSENTRY32结构类型,该函数将取得的进程信息填充到pe32中。PROCESSENTRY32的定义如下: typedef struct tagPROCESSENTRY32{ DWORD dwSize;//结构大小 DWORD cntUsage; DWORD th32ProcessID;//进程ID ULONG_PTR th32DefaultHeapID; DWORD th32ModuleID; DWORD cntThreads;//线程计数 DWORD th32ParentProcessID;//父进程ID LONG pcPriClassBase;//优先级 DWORD dwFlags; TCHAR szExeFile[MAX_PATH];//进程路径 }PROCESSENTRY32,然后从该结构中解析出所需的进程名、进程ID、优先级、线程数、父进程ID和进程路径等信息。 3、BOOL WINAPI Process32Next(HANDLE hSnapshot,LPPROCESSENTRY32 lppe);该函数取得快照中下一个进程信息,参数同Process32First函数。 进程基本信息的获取过程如图7。
图7 进程基本信息的获取 进程CPU使用率是使用Windows NT以上系统提供的性能监视器取得。Windows性能监视器所用的编程接口是以性能数据助手库(PDH.dll)及一系列 C/C++头文件(即pdh.h、pdhmsg.h和winperf.h,它们是操作系统附带的)的形式公开给用户的。部分主要代码如下: PDH_STATUS pdhStatus; PDH_FMT_COUNTERVALUE fmtValue; pdhStatus = PdhCollectQueryData(m_hQuery);//收集数据 pdhStatus = PdhGetFormattedCounterValue( hCounter,PDH_FMT_LONG,&dwctrType,&fmtValue);//得到格式化数据,fmtValue即是我们需要得到的CPU使用率数据。 Windows 9X系统上不能通过以上方法获得CPU使用率,因此设计的该进程管理软件不能获取9X系统上进程的CPU使用率。 要得到进程的内存使用率要用到Psapi.dll的函数GetProcessMemoryInfo,首先在Process.h 中定义WINAPI函数类型: GETPROCESSMEMORYINFO GetProcessMemoryInfo;,再取得内存使用数: PROCESS_MEMORY_COUNTERS pmc; GetProcessMemoryInfo(hProcess,&pmc,sizeof(pmc)); dwMemoryUse = pmc.WorkingSetSize;//内存使用大小 pmc返回进程的内存使用信息,它是定义的一个PROCESS_MEMORY_COUNTERS结构,定义如下: typedef struct _PROCESS_MEMORY_COUNTERS{ DWORD cb; DWORD PageFaultCount;//结构尺寸 SIZE_T PeakWorkingSetSize;//缺页数 SIZE_T WorkingSetSize;//当前工作集尺寸 SIZE_T QuotaPeakPagedPoolUsage;//最高页池使用数 SIZE_T QuotaPagedPoolUsage;//当前页池使用数 SIZE_T QuotaPeakNonPagedPoolUsage;//最高无页池使用数 SIZE_T QuotaNonPagedPoolUsage; //当前无页池使用数 SIZE_T PagefileUsage;//当前分配页文件空间 SIZE_T PeakPagefileUsage;//最高分配页文件空间 }PROCESS_MEMORY_COUNTERS,*PPROCESS_MEMORY_COUNTERS; 3.3.2 显示模块及线程信息 模块信息有模块名、模块大小、基地址。直接通过ToolHelp API函数便可实现。主要用到的函数有: 1、hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwPID )该函数用于创建指定进程的模块快照。 2、Module32First(hModuleSnap,&me32);该函数获取指定进程的第一个模块信息,将取得的信息填充到me32中。me32是一个MODULEENTRY32结构类型,对它的定义如下: Typedef struct tagMODULEENTRY32{ DWORD dwSize; DWORD th32ModuleID; DWORD th32ProcessID; DWORD GlblcntUsage; DWORD ProccntUsage; BYTE * modBaseAddr; DWORD modBaseSize; HMODULE hModule; char szModule[MAX_MODULE_NAME32 + 1]; char szExePath[MAX_PATH]; }MODULEENTRY32; 3、Module32Next(hModuleSnap,&me32)该函数获取指定进程的下一个模块信息。 线程信息包括线程ID和线程优先级,也是通过ToolHelp API函数取得。 1、hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);该函数创建指定进程的线程快照,取得所有线程信息。 2、Thread32First(hThreadSnap,&te32);//取得指定进程的第一个线程信息将取得的信息填充到te32中。te32也是一个数据结构,它的定义和存放进程信息或存放模块信息的数据结构类似。 typedef struct tagTHREADENTRY32{ DWORD dwSize;//结构体尺寸,必须在调用前指定 DWORD cntUsage; DWORD th32ThreadID;//线程ID DWORD th32OwnerProcessID;//创建该线程的进程ID LONG tpBasePri;//基本优先级 LONG tpDeltaPri; DWORD dwFlags; } THREADENTRY32,*PTHREADENTRY32; 3、Thread32Next(hThreadSnap,&te32);//取得指定进程的下一个模块信息。
|
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT |
本文选自计算机毕业设计http://myeducs.cn |