VB.NET實現Windows進程管理器
我的計算機系統是Windows 2000服務器版,回想當初從Win 98升級到Win 2000時,主要原因除了在Win 98下無法安裝Visual Studio .Net 2002外,另外一個原因就是Win 2000自帶一個我非常喜歡的可以管理進程的應用程序,通過這個管理器可以得到計算機到底運行了多少進程,在掌握那些進程屬于正常進程的情況下,就可以得到計算機中那些是不正常的進程,從而判斷計算機是否感染了病毒或黑客程序。可見Windows的進程管理器還是具有很高的實用價值的。其實用Visual Basic .Net來實現類似的功能應該算是比較方便的,因為在.Net FrameWork SDK中提供了可以獲得計算機進程數據以及操控計算機進程相關的類庫。本文的以下內容就來詳細介紹在Visual Basic .Net中實現類似Windows進程管理器的具體方法。
一.本文程序設計、調試和運行的環境:
(1).微軟公司視窗2000服務器版。
(2).Visual Studio .Net正式版,.Net FrameWork SDK版本號3705。
二.簡介Visual Basic .Net實現Windows進程管理器時的主要類庫:
在用Visual Basic .Net實現Windows進程管理器中最重要,也是最頻繁的就是Process類。Process類位于命名空間System.Diagnostics中,使用者可以提供使用它來操控計算機進程,如啟動、停止、控制進程等。和得到與進程相關的屬性,如線程集、加載的模塊(即加載的DLL文件和EXE文件)和各種性能信息(如進程當前使用的內存量)等。其實讀者只需對下面介紹的程序進行一定的修改,所實現的功能就大大強于Windows的進程管理器功能,但前提是掌握以下表01和表02中所列出的Process的常用屬性、常用方法及其說明。
| 屬性 | 說明 |
| BasePriority | 獲取關聯進程的基本優先級。 |
| EnableRaisingEvents | 獲取或設置在進程終止時是否應激發Exited事件。 |
| ExitCode | 獲取關聯進程終止時指定的值。 |
| ExitTime | 獲取關聯進程退出的時間。 |
| Handle | 返回關聯進程的本機句柄。 |
| HandleCount | 獲取由進程打開的句柄數。 |
| HasExited | 獲取指示關聯進程是否已終止的值。 |
| Id | 獲取關聯進程的唯一標識符。 |
| MachineName | 獲取關聯進程正在其上運行的計算機的名稱。 |
| MainModule | 獲取關聯進程的主模塊。 |
| MainWindowHandle | 獲取關聯進程主窗口的窗口句柄。 |
| MainWindowTitle | 獲取進程的主窗口標題。 |
| MaxWorkingSet | 獲取或設置關聯進程的允許的最大工作集大小。 |
| MinWorkingSet | 獲取或設置關聯進程的允許的最小工作集大小。 |
| Modules | 獲取已由關聯進程加載的模塊。 |
| NonpagedSystemMemorySize | 獲取分配給此進程的未分頁的系統內存大小。 |
| PagedMemorySize | 獲取分頁的內存大小。 |
| PagedSystemMemorySize | 獲取分頁的系統內存大小。 |
| PeakPagedMemorySize | 獲取峰值分頁內存大小。 |
| PeakVirtualMemorySize | 獲取峰值虛擬內存大小。 |
| PeakWorkingSet | 獲取峰值工作集大小。 |
| PriorityBoostEnabled | 獲取或設置一個值,該值指示主窗口擁有焦點時是否由操作系統暫時提升關聯進程的優先級。 |
| PriorityClass | 獲取或設置關聯進程的總體優先級類別。 |
| PrivateMemorySize | 獲取專用內存大小。 |
| PrivilegedProcessorTime | 獲取此進程的特權處理器時間。 |
| ProcessName | 獲取該進程的名稱。 |
| StartTime | 獲取關聯進程啟動的時間。 |
| Threads | 獲取在關聯進程中運行的一組線程。 |
| TotalProcessorTime | 獲取此進程的總的處理器時間。 |
| UserProcessorTime | 獲取此進程的用戶處理器時間。 |
| VirtualMemorySize | 獲取進程的虛擬內存大小。 |
| WorkingSet | 獲取關聯進程的物理內存使用情況。 |
表01:Process類常用屬性及其說明
可見Process類提供了很多獲取計算機進程相關信息的屬性,在下面介紹的用Visual Basic .Net實現Windows進程管理器中,只需要使用Process中的ProcessName、Id、StartTime和PrivateMemorySize區區四個屬性。同樣Process提供了許多用以操控進程的方法,在下面介紹的程序中,調用了GetProcessById、Kill、Close、GetProcesses等方法來獲取計算機進程數據和操控進程狀態。Process類中的其他常用方法及其說明見下表所示:
| 方法 | 說明 |
| Close | 釋放與此組件關聯的所有資源。 |
| CloseMainWindow | 通過向進程的主窗口發送關閉消息來關閉擁有用戶界面的進程。 |
| CreateObjRef | 創建一個對象,該對象包含生成用于與遠程對象進行通訊的代理所需的全部相關信息。 |
| EnterDebugMode | 將Process實例置于與以特殊模式運行的操作系統進程進行交互的狀態。 |
| GetCurrentProcess | 獲取新的Process實例并將其與當前活動的進程關聯。 |
| GetLifetimeService | 檢索控制此實例的生存期策略的當前生存期服務對象。 |
| GetProcessById | 創建新的Process實例,并將其與您指定的現有進程資源關聯。 |
| GetProcesses | 創建新的Process實例的數組,并將它們與現有進程資源關聯。 |
| GetProcessesByName | 創建新的Process實例的數組,并將它們與共享指定的進程名稱的所有現有進程資源關聯。 |
| InitializeLifetimeService | 獲取控制此實例的生存期策略的生存期服務對象。 |
| Kill | 立即停止關聯的進程。 |
| LeaveDebugMode | 使Process實例離開允許它與以特殊模式運行的操作系統進程交互的狀態。 |
| Refresh | 放棄有關關聯進程的、已緩存到該進程組件內的任何信息。 |
| Start | 啟動進程資源并將其與Process實例關聯。 |
| WaitForExit | 設置等待關聯進程退出的時間,并在該段時間結束前或該進程退出前,阻止當前線程執行。 |
| WaitForInputIdle | 使Process實例等待關聯進程進入空閑狀態。 |
表02:Process類常用方法及其說明