【正文】
utilization of system resources. This software also realized some basic function for managing process, such as ending the task, switching the task, terminating the process and so on. During the process of my program, the information for tasks, process, thread modules and the utilization of system resource is got by calling the Windows API functions. Finally I test it on the Windows XP system. And it achieves the basic function for managing process. It provides a good reference for users to view the process at current and the utilization of system resources. Key words: Task Manager。 關(guān)鍵詞 : 任務(wù)管理器 ; 線程 ; 進程; API 591 論文網(wǎng) The Design and Implementation of the Processes Management Tool for Windows Abstract There are some defects in the Task Manager builtin Windows. For example, it doesn39。 進程與 線程 簡介 進程簡介 進程通常被定義為一個正在運行的程序的實例,它由兩個部分組成:一個是 第 3 頁 共 25 頁 操作系統(tǒng)用來管理進程的內(nèi)核對象。 一個進程的生命周期可以劃分為一組狀態(tài),這些狀態(tài)描述 了整個進程。 調(diào)度:選擇一個就緒線程進入執(zhí)行狀態(tài)。 第 5 頁 共 25 頁 Windows 自帶的任 務(wù)管理器分析 Windows 任務(wù)管理器由性能、進程、應(yīng)用程序三大部分組成。 系統(tǒng)性能頁面顯示物理內(nèi)存、虛擬內(nèi)存和頁文件等詳細(xì)使用情況, CPU、內(nèi)存的使用率,并繪制 CPU 使用率和內(nèi)存使用率的圖形,并用列表控件顯示系統(tǒng)當(dāng)前信息 (系統(tǒng)名、計算機名和當(dāng)前用戶等 )。 當(dāng)用戶選擇標(biāo)簽中的一項是, 為了將 對應(yīng)的 對話框在標(biāo)簽控件中顯示出來,需要在 OnShowWindow(BOOL bShow,UINT nStatus)中添加代碼 相關(guān)代碼。 // 重啟 ExitWindowsEx(EWX_SHUTDOWN,0)。 //窗口標(biāo)題 DWORD dwProcessID。 pTaskThis(ti)。 void SwitchToThisWindow ( HWND hWnd, //被激活的窗口句柄 BOOL bRestore //如果被極小化,則恢復(fù)窗口 )。該函數(shù)取得快照中第一個進程信息, pe32 參數(shù)是 一個 PROCESSENTRY32 結(jié)構(gòu)類型,該函數(shù)將取得的進程信息填充到 pe32 中。Windows 性能監(jiān)視器所用的編程接口是以性能數(shù)據(jù)助手庫 ()及一系列 第 14 頁 共 25 頁 C/C++頭文件(即 、 和 ,它們是操作系統(tǒng)附帶的)的形式公開給用戶的。//結(jié)構(gòu)尺寸 SIZE_T PeakWorkingSetSize。 DWORD th32ModuleID。te32)。這種進程的終止方式是進程的正 常退出,進程中的所有線程資源都能夠得到正確的清除。 本程序 中的結(jié)束進程,是指強制結(jié)束其他應(yīng)用程序運行的進程,應(yīng) 采用TerminateProcess()強制結(jié)束。 GlobalMemoryStatus(amp。 //操作系統(tǒng)的主版本號 DWORD dwMinorVersion。//用戶名 LPTSTR lpszSystemInfo。 取得的系統(tǒng)資源使用情況與 Windows 自帶的任務(wù)管理器 取得的 信息進行 比較, 如圖 14,將數(shù)據(jù)進行計算后 結(jié)果一致。 [7] (美 )David . VC++技術(shù)內(nèi)幕 [M].北京: 清華大學(xué) 出版社 ,2021。 在任務(wù)頁面中能查看任務(wù)名、 PID、運行狀態(tài)信息;能結(jié)束任務(wù)、切換任務(wù)。 memset(Temp,0,20)。 獲取操作系統(tǒng)名需要用到微軟標(biāo)準(zhǔn)函數(shù) GetVersionEx()。 //刪除文件 保存進程信息到文件 用文件類創(chuàng)建一個 html 文件,將當(dāng)前進程列表中的各項信息按照網(wǎng)頁格式寫入文件中 。所以,通常只有在其他任何方法都無法迫使進程退出時才會考慮使用TerminateProcess()去強制結(jié)束進程的。te32); //取得指定進程的下一個模塊信息。 線程信息包括 線程 ID 和線程優(yōu)先級 ,也是通過 ToolHelp API 函數(shù) 取得。 Module32First(hModuleSnap,amp。pmc,sizeof(pmc))。 BOOL WINAPI Process32Next(HANDLE hSnapshot,LPPROCESSENTRY32 lppe)。主要用到 ToolHelp API 中的以下幾個函數(shù): hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)。//強制終止該窗口進程 CloseHandle(hProcess)。 = PID。 相關(guān)代碼是在 CPcsMgrApp 類的 InitInstance()函數(shù)中添加。但在 Windows 98 和 Windows 2021 實現(xiàn)稍有不同。 //圖表 并定義一個圖像列表變量用于存放標(biāo)簽圖標(biāo): CImageList m_ImageList。; (3)系統(tǒng)性能顯示:繪制 CPU、內(nèi)存使用率圖,以描述系統(tǒng)性能;列出物理內(nèi)存、虛擬內(nèi)存和頁文件的使用情況;顯示系統(tǒng)當(dāng)前信息,包括系統(tǒng)名、計算機名和用戶名等。圖 3 顯示了在單個 CPU 的計算機上是如何實現(xiàn)這種運行方式的。針對線程的三種基本狀態(tài),存在五種基本操作來轉(zhuǎn)換線程的狀態(tài)。 進程的程序部分描述進程所要完成的功能。很多人都使用過進程管理器之類的軟件,或者是 Windows 自帶 的 任務(wù)管理器,它 們都能夠?qū)M 程進行管理 。三個頁面分別用于顯示當(dāng)前運行的窗口程序、進程及進程模塊、系統(tǒng)資源使用情況。這些現(xiàn)象給我們的計算機使用及管理帶來很多的不便。 進程是一個動態(tài)的執(zhí)行過程,它動態(tài)地被創(chuàng)建,并被調(diào)度執(zhí)行后消亡。處于等待狀態(tài)的進程因等待的事件發(fā)生而被喚醒進入就緒狀態(tài) ,如圖 1。 線程與資源分配無關(guān),它屬于某一個進程,并與進程內(nèi)的其它線程一起共享進程的資源。其調(diào)用方式為: NTSTATUS NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS SystemInformationClass,PVOID SystemInformation, ULONG SystemInformationLength,PULONG ReturnLength)。首先 創(chuàng)建一個基于對話框的應(yīng)用程序, 在主對話框類 PcsMgrDlg 中添加一個標(biāo)簽控件用于放置任務(wù)、 進程 第 7 頁 共 25 頁 和系統(tǒng)信息等三個 頁面 , 如圖 3。 case 1:(SW_SHOW)。 AdjustTokenPrivileges(hToken,FALSE,amp。 獲取窗口標(biāo)題,使用 API 標(biāo)準(zhǔn)函數(shù) GetWindowText (): char temp[MAX_PATH]。 (i,1,str)。 接下來只要用任何現(xiàn)存窗口的句柄調(diào)用這個函數(shù)即可,參數(shù) bRestore 指定如果窗口極小化,是否恢復(fù)其原狀態(tài)。 DWORD th32ModuleID。dwctrType,amp。//最高無頁池使用數(shù) SIZE_T QuotaNonPagedPoolUsage。 DWORD modBaseSize。 DWORD th32ThreadID。該函數(shù)具有強制性,在執(zhí)行完畢后進程即已經(jīng)被結(jié)束,因此位于其后的任何代碼將不能被執(zhí)行。 圖 9 終止進程 刪除文件 當(dāng)發(fā)現(xiàn)進程列表中有不正常的程序,如病毒或木馬程序,我們不僅需要把它們結(jié)束了,還需要將對應(yīng)的文件刪除,使其不能再次運行。 圖 11 內(nèi)存使用率 第 19 頁 共 25 頁 其他性能 顯示 其他性能主要包括物理內(nèi)存、虛擬內(nèi)存和頁文件的使用情況。 其中 dwPlatformId 可為以下值: VER_PLATFORM_WIN32s:標(biāo)識為 Windows 。cchBuff)。通過課題 的 設(shè)計, 鞏固了 以前所學(xué)的基本知識,更學(xué)到了軟件設(shè)計的基本方法、技巧和流程, 這對以后的學(xué)習(xí)工作有很大的幫助。 [2] (美 )Steven Holzner. Visual C++ [M].北京: 電子工業(yè)出版社 ,2021。 硬件: CPU: AMD Athlon(tm)xp 2500+ 內(nèi)存: 512M 硬盤: SATA 80G 測試方法 在 Windows XP 系統(tǒng)上運行設(shè)計的程序。 獲取用戶名直接用 ::GetUserName()函數(shù)即可。 MEMORYSTATUS MemStat。 HANDLE hProcess=OpenProcess(PROCESS_TERMINATE,FALSE, 第 18 頁 共 25 頁 (m_iCurSel))。例如,如果在程序調(diào)用 ExitProcess()函數(shù)之前曾用 new 操作符申請過一段內(nèi)存,那么將會由于 ExitProcess()函數(shù)的強制性而無法通過 delete 操作符將其釋放,從而造成內(nèi)存泄漏。//創(chuàng)建該線程的進程