簡述WINDOWS進程管理工具的原理和實現(xiàn)_第1頁
簡述WINDOWS進程管理工具的原理和實現(xiàn)_第2頁
簡述WINDOWS進程管理工具的原理和實現(xiàn)_第3頁
簡述WINDOWS進程管理工具的原理和實現(xiàn)_第4頁
簡述WINDOWS進程管理工具的原理和實現(xiàn)_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

(企業(yè)管理工具)簡述WINDOWS進程管理工具的原理和實現(xiàn)591論文網(wǎng)www.591LW.com簡述WINDOWS進程管理工具的原理和實現(xiàn)摘要Windows自帶的任務(wù)管理器存在功能上的缺陷,比如不能查看進程的模塊及線程信息。課題設(shè)計就是模擬Windows任務(wù)管理器,開發(fā)一個功能更完善的WindowsVC++程管理的基本功能。在程序的設(shè)計過程中,通過調(diào)用WindowsAPI函數(shù)而獲得任WindowsXP系統(tǒng)上況提供了很好的參考。關(guān)鍵詞:任務(wù)管理器;線程;進程;API591論文網(wǎng)www.591LW.comTheDesignandImplementationoftheProcessesManagementToolforWindowsAbstractTherearesomedefectsintheTaskManagerbuilt-inWindows.Forexample,itdoesn'tshowustheinformationofprocessmodulesandthreads.TheworkofmydesignistofollowtheWindowsTaskManageranddevelopthesoftwarewhichhasimprovedfunctionformanagingprocess.ThissoftwareisdesignedtobeaprogrambasedonadialogwriteintheVC++.Thereisalabelcontrolinthemaindialogbox,andtherearethreepagesfortask,processandsysteminformation.Thelabelcontrolisusedtoselectthepageandtoshowit.Thethreepagesareusedrespectivelytodisplaytheinformationoftaskrunsatcurrent,processandprocessmodules,theutilizationofsystemresources.Thissoftwarealsorealizedsomebasicfunctionformanagingprocess,suchasendingthetask,switchingthetask,terminatingtheprocessandsoon.Duringtheprocessofmyprogram,theinformationfortasks,process,threadmodulesandtheutilizationofsystemresourceisgotbycallingtheWindowsAPIfunctions.FinallyItestitontheWindowsXPsystem.Anditachievesthebasicfunctionformanagingprocess.Itprovidesagoodreferenceforuserstoviewtheprocessatcurrentandtheutilizationofsystemresources.Keywords:TaskManager;Threads;Process;API591論文網(wǎng)www.591LW.com目錄論文總頁數(shù):25頁1引言11.1課題背景11.2國內(nèi)外研究現(xiàn)狀11.3課題研究的意義11.4課題的研究方法11.5進程與線程簡介11.5.1進程簡介11.5.2線程簡介31.5.3進程與線程的關(guān)系31.5.4Windows自帶的任務(wù)管理器分析42主要功能及設(shè)計思路42.1主要功能42.2設(shè)計思路53詳細設(shè)計53.1主框架的實現(xiàn)53.1.1子對話框的顯示63.1.2實現(xiàn)菜單73.1.3提升程序權(quán)限83.2任務(wù)列表頁面設(shè)計83.2.1顯示任務(wù)信息83.2.2結(jié)束任務(wù)93.2.3切換任務(wù)103.3進程列表頁面設(shè)計103.3.1顯示進程信息113.3.2顯示模塊及線程信息133.3.3結(jié)束進程153.3.4刪除文件163.3.5保存進程信息到文件173.4系統(tǒng)性能頁面設(shè)計173.4.1繪制CPU使用率圖173.4.2繪制內(nèi)存使用率圖193.4.3其他性能顯示193.4.4系統(tǒng)信息顯示204測試結(jié)果214.1測試環(huán)境214.2測試方法214.3測試結(jié)果21結(jié)論23參考文獻23591論文網(wǎng)www.591LW.com1引言1.1課題背景的一些關(guān)于計算機操作系統(tǒng)、進程、計算機安全、編程等知識)的能力,模擬Windows任務(wù)管理器,開發(fā)一個功能更完善的Windows進程管理軟件,對任務(wù)、進程進行查看、結(jié)束等操作。1.2國內(nèi)外研究現(xiàn)狀從現(xiàn)狀看來,Windows技術(shù)都相當成熟。微軟Windows操作系統(tǒng)系列(98和ME除外)都自帶有進程管理器,但功能不是很完善,不能查看進程模塊及線程信息,而許多其他版本的Windows進程管理軟件都具有完善的功能。1.3課題研究的意義Windows第1頁共25頁591論文網(wǎng)www.591LW.com次模擬實際產(chǎn)品的開發(fā),對于自己以后工作能力的培養(yǎng)具有重要的意義。1.4課題的研究方法系統(tǒng)使用VC++6.0Windows的任務(wù)管理器進行設(shè)計與開發(fā)。的開發(fā)工具進行開發(fā);同時,在開發(fā)設(shè)計與實現(xiàn)中,要保存好相關(guān)的設(shè)計文擋。1.5進程與線程簡介1.5.1進程簡介DLL模塊的代碼和數(shù)據(jù)。它還包含動態(tài)內(nèi)存分配的空間。如線程堆棧和堆分配空間。址空間。述。進程的靜態(tài)描述由三部份組成:進程控件塊PCB,有關(guān)程序段和該程序段對PCB感知進程的存在和通過PCB中所包含的各項變量的變化,掌握進程所處的狀態(tài)以及達到控制進程活動的PCB第2頁共25頁591論文網(wǎng)www.591LW.com作系統(tǒng)中,一個進程的PCB結(jié)構(gòu)都是全部或部分常駐內(nèi)存的。多道操作系統(tǒng)中,這兩部分內(nèi)容存放在外存中,直到該進程執(zhí)行時再調(diào)入內(nèi)存。根據(jù)PCB結(jié)構(gòu)中的狀態(tài)值控制進程。已經(jīng)得到除CPU之外的其它資源,只要由調(diào)度得到處理機,便可立即投入執(zhí)行。進入就緒狀態(tài),如圖1。圖1進程狀態(tài)轉(zhuǎn)換1.5.2線程簡介用戶程序控制。它用于維護線程在執(zhí)行代碼時需要的所有函數(shù)參數(shù)和局部變量TCB組成。寄存器可被用來存儲線程內(nèi)的局部變量,但不能存儲其它線程的相關(guān)變量。第3頁共25頁591論文網(wǎng)www.591LW.com基本狀態(tài),存在五種基本操作來轉(zhuǎn)換線程的狀態(tài)。這五種基本操作是:1、派生:線程在進程內(nèi)派生出來,它既可由進程派生,也可由線程派生。2、阻塞:如果一個線程在執(zhí)行過程中需要等待某個事件發(fā)生,則被阻塞。3、激活:如果阻塞線程的事件發(fā)生,則該線程被激活并進入就緒隊列。4、調(diào)度:選擇一個就緒線程進入執(zhí)行狀態(tài)。5、結(jié)束:如果一個線程執(zhí)行結(jié)束,它的寄存器上下文以及堆棧內(nèi)容等將被釋放。1.5.3進程與線程的關(guān)系程可能包含若干個線程,所有這些線程都“同時”執(zhí)行進程地址空間中的代碼。CPU寄由了,系統(tǒng)就將自動撤消該進程和它的地址空間。CPU時3顯示了在單個CPU的計算機上是如何實現(xiàn)這種運行方式的。如果計算機擁有多個CPU,那么操作系統(tǒng)就要使用復(fù)雜得多的第4頁共25頁591論文網(wǎng)www.591LW.com算法來實現(xiàn)CPU上線程負載的平衡。當創(chuàng)建一個進程時,系統(tǒng)會自動創(chuàng)建它的第一個線程,稱為主線程。然后,該線程可以創(chuàng)建其他的線程,而這些線程又能創(chuàng)建更多的線程。1.5.4Windows自帶的任務(wù)管理器分析Windows任務(wù)管理器由性能、進程、應(yīng)用程序三大部分組成。其實這三大部CPU余的數(shù)據(jù)都是由進程模塊順便取得的。Windows2000/XP的任務(wù)管理器通過NtQuerySystemInformation的調(diào)用來獲CPU在任務(wù)管理器中的幾乎所有信息都是來自該函數(shù)。NtQuerySystemInformation函數(shù)隸屬,是一個未公開的函數(shù)。其調(diào)用方式為:NTSTATUSNtQuerySystemInformation(SYSTEM_INFORMATION_CLASSSystemInformationClass,PVOIDSystemInformation,ULONGSystemInformationLength,PULONGReturnLength);SystemInformationClass:在SYSTEM_INFORMATION_CLASS中的枚舉值之一,聲明返回信息的種類;SystemInformation:指到一個要求返回信息的緩沖區(qū),這個系統(tǒng)信息變量的尺寸和結(jié)構(gòu)依賴于SystemInformationClass參數(shù)的值;SystemInformationLength:SystemInformation參數(shù)指定的緩沖區(qū)尺寸;ReturnLength:返回值尺寸。Windows2000和WindowsXP在Windows98和WindowsMe第5頁共25頁591論文網(wǎng)www.591LW.com用復(fù)雜。因此,在此次進程管理器的開發(fā)中,將使用其它方法來獲取各類信息。2主要功能及設(shè)計思路2.1主要功能設(shè)計要求實現(xiàn)的主要功能——進程管理功能,具體包括以下內(nèi)容:(1)任務(wù)管理:列出所有當前運行的窗口程序名、運行狀態(tài)等信息;對它們進行終止、切換等操作。(2)進程管理:列出所有的Windows進程,以及進程所在的磁盤絕對路徑,(3)CPU和用戶名等。2.2設(shè)計思路在VisualC++6.0環(huán)境設(shè)計一個基于對話框的應(yīng)用程序,類似于Windows自帶的任務(wù)管理器,主窗口上添加一個標簽控件,加入三個頁面,分別是:任務(wù)、進程和系統(tǒng)性能信息。(可見且有窗口標題)進行顯示,并能夠?qū)θ蝿?wù)進行操作,如:添加新任務(wù),結(jié)束任務(wù),切換任務(wù)等。進行顯示,并能夠?qū)嵭薪K止進程、進程列表保存到文件等操作。第6頁共25頁591論文網(wǎng)www.591LW.com系統(tǒng)性能頁面顯示物理內(nèi)存、虛擬內(nèi)存和頁文件等詳細使用情況,CPU、內(nèi)CPU使用率和內(nèi)存使用率的圖形,并用列表控件顯示系統(tǒng)當前信息(系統(tǒng)名、計算機名和當前用戶等)。3詳細設(shè)計程序主界面如圖2。窗口程序、進程及進程模塊、系統(tǒng)資源使用情況。圖2主界面3.1主框架的實現(xiàn)所設(shè)計的程序是基于對話框的程序。首先創(chuàng)建一個基于對話框的應(yīng)用程序,在主對話框類PcsMgrDlg三個頁面,如圖3。3.每一項時,分別顯示對應(yīng)頁面的相關(guān)信息。Style屬性設(shè)為ChildBoard設(shè)為NoneCTaskCProcess,CChart,并定義這三個類的變量:CTaskm_Task;//任務(wù)第7頁共25頁591論文網(wǎng)www.591LW.comCProcessm_Process;//進程CChartm_Chart;//圖表并定義一個圖像列表變量用于存放標簽圖標:CImageListm_ImageList;接下來就創(chuàng)建子窗口:m_(IDD_TASK,m_());m_(IDD_PROCESS,m_());m_(IDD_CHART,m_());當用戶選擇標簽中的一項是,為了將對應(yīng)的對話框在標簽控件中顯示出來,需要在OnShowWindow(BOOLbShow,UINTnStatus)中添加代碼相關(guān)代碼。這樣便可示不同頁面還需在OnSelchangeMaintab(NMHDR*pNMHDR,LRESULT*pResult)和OnSelchangingMaintab(NMHDR*pNMHDR,LRESULT*pResult)兩函數(shù)中添加顯示代碼。voidCPcsMgrDlg::OnSelchangeMaintab(NMHDR*pNMHDR,LRESULT*pResult){switch(m_()){case0:m_(SW_SHOW);//任務(wù)頁面被選中,則顯示任務(wù)頁面m_();break;case1:m_(SW_SHOW);//任務(wù)頁面被選中,則顯示進程頁面m_();break;第8頁共25頁591論文網(wǎng)www.591LW.comcase2:m_(SW_SHOW);//任務(wù)頁面被選中,則顯示系統(tǒng)信息頁面m_();break;}}3.1.2實現(xiàn)菜單WindowsAPI函數(shù)ExitWindowsEx()完成的。但在Windows98和Windows2000實現(xiàn)稍有不同。ExitWindowsEx()函數(shù)定義格式:BOOLExitWindowsEx(UINTuFlags//操作DWORDdwReason//原因);在Windows98/重啟/關(guān)機功能將直接調(diào)用ExitWindiwsExExitWindowsEx(EWX_LOGOFF,0);//注銷ExitWindowsEx(EWX_REBOOT,0);//重啟ExitWindowsEx(EWX_SHUTDOWN,0);//關(guān)機在Windows2000實現(xiàn)“注銷/重啟/關(guān)機”功能須取得高級權(quán)限:LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&[0].Luid);=1;[0].Attributes=SE_PRIVILEGE_ENABLED;AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0第9頁共25頁591論文網(wǎng)www.591LW.com);ExitWindowsEx(FFlag,0);新建菜單直接調(diào)用系統(tǒng)運行對話框:RUNRunFileDlg;RunFileDlg=(RUN)GetProcAddress(hShell32,MAKEINTRESOURCE(61));開機自動運行可在注冊表的主鍵”HKEY_LOCAL_MACHINE”下的運行子鍵”Software\Microsoft\Windows\CurrentVersion\Run”下寫入和刪除一個鍵值的方法實現(xiàn)。3.1.3提升程序權(quán)限為了能夠終止所有進程,需要提升本進程的權(quán)限:1、先調(diào)用GetCurrentProcess函數(shù)取得當前進程的句柄;2、然后調(diào)用OpenProcessToken打開當前進程的訪問令牌;3、接著調(diào)用LookupPrivilegeValue函數(shù)取得你想提升的權(quán)限的值;4AdjustTokenPrivileges函數(shù)給當前進程的訪問令牌增加權(quán)限。相關(guān)代碼是在CPcsMgrApp類的InitInstance()函數(shù)中添加。3.2任務(wù)列表頁面設(shè)計添加新任務(wù),結(jié)束任務(wù),切換任務(wù)等。3.2.1顯示任務(wù)信息列表頁面中添加一個列表控件,用于將任務(wù)信息顯示出來,如圖4。第10頁共25頁591論文網(wǎng)www.591LW.com要的相關(guān)信息:t{CStringstrTaskName;//窗口標題DWORDdwProcessID;//進程IDDWORDdwThreadID;//線程IDCStringstrRunState;//運行狀態(tài)DWORDdwWndHandle;//窗口句柄}TASK_IFNO,*PTASK_INFO;獲取窗口標題,使用API標準函數(shù)GetWindowText():chartemp[MAX_PATH];GetWindowText(hwnd,temp,sizeof(temp))獲取進程及線程ID:TID=GetWindowThreadProcessId(hwnd,&PID);確定運行狀態(tài)是利用SendMessageTimeout向窗口發(fā)送消息而取得:if(SendMessageTimeout(hwnd,WM_SYSCOMMAND,NULL,NULL,SMTO_ABORTIFHUNG,1000,NULL))strRunState="正在運行";elsestrRunState="沒有響應(yīng)";第11頁共25頁591論文網(wǎng)www.591LW.com然后添加任務(wù)信息到數(shù)組:TASK_IFNOti;=temp;=PID;=TID;=(DWORD)hwnd;=strRunState;pTaskThis->m_(ti);最后把任務(wù)信息的每一行在任務(wù)列表中顯示出來:for(inti=0;i<newCount;i++){m_(i,,i);//任務(wù)名("%d",);m_(i,1,str);//進程ID("%d",);m_(i,2,str);//線程IDm_(i,3,);//運行狀態(tài)}3.2.2結(jié)束任務(wù)結(jié)束任務(wù)操作將調(diào)用SendMessageTimeout函數(shù)向要關(guān)閉的窗口發(fā)送關(guān)閉消息,如果沒有響應(yīng)則用TerminateProcess函數(shù)強行終止該窗口進程。if(!SendMessageTimeout(hwnd,WM_SYSCOMMAND,SC_CLOSE,NULL,SMTO_BLOC第12頁共25頁591論文網(wǎng)www.591LW.comK|SMTO_ABORTIFHUNG,1000,NULL)){HANDLEhProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,);//打開進程TerminateProcess(hProcess,1);//強制終止該窗口進程CloseHandle(hProcess);}3.2.3切換任務(wù)我們知道,Windows9x/2000中SetForegroundWindow函數(shù)當用戶正在操作其他窗口時是不能強制某個窗口為前景窗口的,而是激活窗口并調(diào)用FlashWindowEx函數(shù)來通知用戶。但是很多實際情況要求將激活窗口的同時將創(chuàng)建這個窗口的線程置為前景狀態(tài)。碰到這種情況我們可以使用USER32.DLL中的幾個未公開API函數(shù)。voidSwitchToThisWindow(HWNDhWnd,//被激活的窗口句柄BOOLbRestore//如果被極小化,則恢復(fù)窗口);typedefvoid(WINAPI*PROCSWITCHTOTHISWINDOW)(HWND,BOOL);PROCSWITCHTOTHISWINDOWSwitchToThisWindow;HMODULEhUser32=GetModuleHandle("user32");SwitchToThisWindow=(PROCSWITCHTOTHISWINDOW)GetProcAddress(hUser32,"SwitchToThisWindow");接下來只要用任何現(xiàn)存窗口的句柄調(diào)用這個函數(shù)即可,參數(shù)bRestore指定第13頁共25頁591論文網(wǎng)www.591LW.com如果窗口極小化,是否恢復(fù)其原狀態(tài)。SwitchToThisWindow(hWnd,TRUE);3.3進程列表頁面設(shè)計當前選擇的進程的所以模塊信息,如圖5。第14頁共25頁591論文網(wǎng)www.591LW.com圖5進程列表頁面3.3.1顯示進程信息IDCPU級、線程數(shù)、父進程ID和進程路徑等,如圖6。It1、hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);該函數(shù)用于創(chuàng)建一個系統(tǒng)進程快照,取得系統(tǒng)中的所有進程的信息。2Process32First(hProcessSnap,&pe32);該函數(shù)取得快照中第一個進程信息,pe32參數(shù)是一個PROCESSENTRY32結(jié)構(gòu)類型,該函數(shù)將取得的進程信息填充到pe32中。PROCESSENTRY32的定義如下:typedefstructtagPROCESSENTRY32{DWORDdwSize;//結(jié)構(gòu)大小DWORDcntUsage;DWORDth32ProcessID;//進程IDULONG_PTRth32DefaultHeapID;DWORDth32ModuleID;DWORDcntThreads;//線程計數(shù)DWORDth32ParentProcessID;//父進程ID第15頁共25頁591論文網(wǎng)www.591LW.comLONGpcPriClassBase;//優(yōu)先級DWORDdwFlags;TCHARszExeFile[MAX_PATH];//進程路徑}PROCESSENTRY32ID線程數(shù)、父進程ID和進程路徑等信息。3、BOOLWINAPIProcess32Next(HANDLEhSnapshot,LPPROCESSENTRY32lppe);該函數(shù)取得快照中下一個進程信息,參數(shù)同Process32First函數(shù)。進程基本信息的獲取過程如圖7。取得。Windows性能頭文件(即pdh開給用戶的。部分hCounter,PDH_FMT_LONG,&dwctrType,&fmtValue);//得到格式化數(shù)據(jù),fmtValue即是我們需要得到的CPU使用率數(shù)據(jù)。Windows9X系統(tǒng)上不能通過以上方法獲得CPU使用率,因此設(shè)計的該進程管理軟件不能獲取9X系統(tǒng)上進程的CPU使用率。要得到進程的內(nèi)存使用率要用到的函數(shù)GetProcessMemoryInfo,首先在第16頁共25頁591論文網(wǎng)www.591LW.comProcess.h中定義WINAPI函數(shù)類型:GETPROCESSMEMORYINFOGetProcessMemoryInfo;,再取得內(nèi)存使用數(shù):PROCESS_MEMORY_COUNTERSpmc;GetProcessMemoryInfo(hProcess,&pmc,sizeof(pmc));dwMemoryUse=;//內(nèi)存使用大小pmc返回進程的內(nèi)存使用信息,它是定義的一個PROCESS_MEMORY_COUNTERS結(jié)構(gòu),定義如下:typedefstruct_PROCESS_MEMORY_COUNTERS{DWORDcb;DWORDPageFaultCount;//結(jié)構(gòu)尺寸SIZE_TPeakWorkingSetSize;//缺頁數(shù)SIZE_TWorkingSetSize;//當前工作集尺寸SIZE_TQuotaPeakPagedPoolUsage;//最高頁池使用數(shù)SIZE_TQuotaPagedPoolUsage;//當前頁池使用數(shù)SIZE_TQuotaPeakNonPagedPoolUsage;//最高無頁池使用數(shù)SIZE_TQuotaNonPagedPoolUsage;//當前無頁池使用數(shù)SIZE_TPagefileUsage;//當前分配頁文件空間SIZE_TPeakPagefileUsage;//最高分配頁文件空間}PROCESS_MEMORY_COUNTERS,*PPROCESS_MEMORY_COUNTERS;3.3.2顯示模塊及線程信息ToolHelpAPI函數(shù)便可實現(xiàn)。主要用到的函數(shù)有:第17頁共25頁591論文網(wǎng)www.591LW.com1hModuleSnap=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwPID)該函數(shù)用于創(chuàng)建指定進程的模塊快照。2Module32First(hModuleSnap,&me32);該函數(shù)獲取指定進程的第一個模塊信息,將取得的信息填充到me32中。me32是一個MODULEENTRY32結(jié)構(gòu)類型,對它的定義如下:TypedefstructtagMODULEENTRY32{DWORDdwSize;DWORDth32ModuleID;DWORDth32ProcessID;DWORDGlblcntUsage;DWORDProccntUsage;BYTE*modBaseAddr;DWORDmodBaseSize;HMODULEhModule;charszModule[MAX_MODULE_NAME32+1];charszExePath[MAX_PATH];}MODULEENTRY32;3Module32Next(hModuleSnap,&me32)該函數(shù)獲取指定進程的下一個模塊信息。線程信息包括線程ID和線程優(yōu)先級,也是通過ToolHelpAPI函數(shù)取得。1、hThreadSnap=CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);該函數(shù)創(chuàng)建指定進程的線程快照,取得所有線程信息。第18頁共25頁591論文網(wǎng)www.591LW.com2Thread32First(hThreadSnap,&te32);//取得指定進程的第一個線程信息將取得的信息填充到te32中。te32也是一個數(shù)據(jù)結(jié)構(gòu),它的定義和存放進程信息或存放模塊信息的數(shù)據(jù)結(jié)構(gòu)類似。typedefstructtagTHREADENTRY32{DWORDdwSize;//結(jié)構(gòu)體尺寸,必須在調(diào)用前指定DWORDcntUsage;DWORDth32ThreadID;//線程IDDWORDth32OwnerProcessID;//創(chuàng)建該線程的進程IDLONGtpBasePri;//基本優(yōu)先級LONGtpDeltaPri;DWORDdwFlags;}THREADENTRY32,*PTHREADENTRY32;3Thread32Next(hThreadSnap,&te32)//取得指定進程的下一個模塊信息。獲取進程模塊的過程如圖8。圖8模塊信息的獲取3.3.3結(jié)束進程的終止方式是進程的正常退出,進程中的所有線程資源都能夠得到正確的清除。第19頁共25頁591論文網(wǎng)www.591LW.com程或其他進程的運行。ExitProcess()函數(shù)即可在進程中的某個線程中使用,并將立即終止本進程的運行。ExitProcess()函數(shù)原型為:VOIDExitProcess(UINTuExitCode);其參數(shù)uExitCode為進程設(shè)置了退出代代碼將不能被執(zhí)行。雖然ExitProcess()函數(shù)可以在結(jié)束進程的同時通知與其相關(guān)聯(lián)的動態(tài)鏈接庫,但是由于它的這種執(zhí)行的強制性,使得ExitProcess()函數(shù)在使用上將存在有安全隱患。例如,如果在程序調(diào)用ExitProcess()函數(shù)之前曾用new操作符申請過一段內(nèi)存,那么將會由于ExitProcess()函數(shù)的強制性而無法通過deleteExitProcess()函數(shù)的強制性和不安全性,在使用時一定要引起注意。ExitProcess()只能強制執(zhí)行本進程的退出,如果要在一個進程中強制結(jié)束其他的進程就要用TerminateProcess()來實現(xiàn)。與ExitProcess()不同,TerminateProcess的。所以,通常只有在其他任何方法都無法迫使進程退出時才會考慮使用TerminateProcessTerminateProcess數(shù)原型:BOOLTerminateProcess(HANDLEhProcess,UINTuExitCode);參數(shù)hProcess和uExitCodeuExitCode0時,在調(diào)用TerminateProcess()殺死進程后,Windows1時,殺死進程后,Windows不會再喚醒該進程。本程序中的結(jié)束進程,是指強制結(jié)束其他應(yīng)用程序運行的進程,應(yīng)采用第20頁共25頁591論文網(wǎng)www.591LW.comTerminateProcessOpenProcess函數(shù)將進程打開,然后用TerminateProcess函數(shù)結(jié)束進程。HANDLEhProcess=OpenProcess(PROCESS_TERMINATE,FALSE,m_(m_iCurSel));TerminateProcess(hProcess,1);//終止進程終止進程的流程如圖9。圖9終止進程3.3.4刪除文件OpenProcess函數(shù)將進程打開,用FindFirstFile找到文件,然后用TerminateProcess函數(shù)結(jié)束進程,再刪除該進程對應(yīng)的文件。HANDLEhProcess=OpenProcess(PROCESS_TERMINATE,FALSE,m_(m_iCurSel));HANDLEh=::FindFirstFile(filename,&fData);//查找文件TerminateProcess(hProcess,1);//終止進程::DeleteFile();//刪除文件3.3.5保存進程信息到文件件中。第21頁共25頁591論文網(wǎng)www.591LW.com3.4系統(tǒng)性能頁面設(shè)計該頁面主要顯示CPU前用戶名等。3.4.1繪制CPU使用率圖3.4.2繪制內(nèi)存使用率圖取得內(nèi)存使用率可通過一個全局內(nèi)存函數(shù)GlobalMemoryStatus實現(xiàn),該函數(shù)原型為:MEMORYSTATUSMemStat;=sizeof(MEMORYSTATUS);GlobalMemoryStatus(&MemStat);m_ulNewUsges=;繪制圖形也是通過位圖繪制函數(shù)進行繪制,方法和繪制CPU使用率圖一樣。內(nèi)存使用率圖如圖11。圖11內(nèi)存使用率3.4.3其他性能顯示GlobalMemoryStatus函數(shù)得到的。MEMORYSTATUSMemStat;=sizeof(MEMORYSTATUS);GlobalMemoryStatus(&MemStat);//物理內(nèi)存總大小第22頁共25頁591論文網(wǎng)www.591LW.com//物理內(nèi)存可用數(shù)//頁文件總大小//頁文件可用數(shù)//虛擬內(nèi)存總大小//虛擬內(nèi)存可用數(shù)3.4.4系統(tǒng)信息顯示系統(tǒng)信息包括當前操作系統(tǒng)名、用戶名、計算機名等。1、獲取操作系統(tǒng)名需要用到微軟標準函數(shù)GetVersionEx()。在windows.h中定義了OSVERSIONINFO結(jié)構(gòu),OSVERSIONINFO結(jié)構(gòu)包含了操作系統(tǒng)的版本信息,包括操作系統(tǒng)的主版本號、副版本號、創(chuàng)建號、以及操作系統(tǒng)平臺ID號和關(guān)于操作系統(tǒng)的其他信息。typedefstruct_OSVERSIONINFO{DWORDdwOSVersionInfoSize;//指定該數(shù)據(jù)結(jié)構(gòu)的字節(jié)大小DWORDdwMajorVersion;//操作系統(tǒng)的主版本號DWORDdwMinorVersion;//操作系統(tǒng)的副版本號DWORDdwBuildNumber;//操作系統(tǒng)的創(chuàng)建號DWORDdwPlatformId;//操作系統(tǒng)ID號TCHARszCSDVersion[128];//關(guān)于操作系統(tǒng)的一些附加信息}OSVERSIONINFO;其中dwPlatformId可為以下值:VER_PLATFORM_WIN32s:標識為Windows3.1;VER_PLATFORM_W

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論