• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    VB.NET實現超級ptm查看器

    發布: 2007-5-25 09:19 | 作者: 未知 | 來源: 不詳 | 查看: 40次 | 進入軟件測試論壇討論

    領測軟件測試網   在win nt,win 2000,win xp中都有一個性能查看器,我們可以用它來查看計算機上正在運行的程序,獲得與程序相關的主窗口名,和查看cpu和內存,虛擬頁面的使用情況。但是對于更高要求的計算機使用人員來說,這些是不夠的,特別是一些diy的發燒友,他們希望自己可以隨時對自己的計算機進行查看,了解更多的信息從而可以知道自己的計算機是否應該升級了,是否該對虛擬頁面做出調整,是否該換cpu,還是增加內存。

      由于以上情況,所以我們完全有理由做一個更好的查看器。在進行編寫代碼以前我們還需要知道一些基本知識,即proccess,thread,module,F在我們先來學習一下proecss的基本知識。

      1.Proccss的概念

      用最簡短的話來說,進程就是當前運行的應用程序。運行的應用程序包括exe,dll這兩種文件。文件和進程的差別在與,文件是保存在磁盤上的,是靜止的,計算機不會去調用文件,而進程是非靜止的,正是由于著個原因,所以計算機每調用一個進程就需要一定的資源。這些資源包括內存,虛擬頁面,句柄,gdi……

      在.net中我門可以用Process 類,(他位于System.Diagnostics空間中)提供對正在計算機上運行的進程的訪問。使用 Process類,可以獲取當前運行的進程的列表,或者啟動新的進程。Process 類用于訪問系統進程。初始化 Process類后,可使用該類來獲取有關當前運行的進程的信息。此類信息包括線程集、加載的模塊(.dll 和 .exe 文件)和性能信息(如進程當前使用的內存量)。

      系統進程在系統上由其進程標識符唯一標識。與許多 Windows 資源一樣,進程也由其句柄標識,而句柄在計算機上可能不唯一。句柄是表示資源標識符的一般術語。即使進程已退出,操作系統仍保持進程句柄,該句柄通過 Process 組件的 Handle 屬性訪問。因此,可以獲取進程的管理信息,如 ExitCode(通常,或者為零表示成功,或者為非零錯誤代碼)和 ExitTime。句柄是非常有價值的資源。

      2. thread的概念

      進程由一個或多個線程組成。換句話說線程是將進程分成了多個小的部分.每個線程都有優先級,在較高優先級的線程完成任務的時候,較低優先級的線程可能會被迫等待。在多處理器計算機上,將多個線程移到不同的處理器上,從而對 CPU 負荷進行平衡。每個進程啟動時都具有一個線程,該線程稱為主線程。任何線程都可創建其他線程。進程中的所有線程共享該進程的地址空間。

      在.net中可以用System.Diagnostics的ProcessThread類來與進程獲相關的線程信息.用System.Threading的Thread類來創建新線程.請注意Thread類不可以用來訪問其他進程的線程,他只可以用來創建一個線程而已,一定要記住這點。如果你還想對線程進行更多的操作,可以用System.Diagnostics.ProcessThread類中返回的id,通過它作為api函數的參數來操作線程。

      3. module的概念

      模塊指的是可執行文件或動態鏈接庫 (DLL)。每個進程包含一個或多個模塊?梢允褂肧ystem.Diagnostics的ProcessModule類來獲得有關模塊的信息,這個類中有一個很有用的屬性EntryPointAddress他可以返回獲取在系統加載和運行模塊時運行的函數的內存地址。然后用Visual Studio6.0中的工具,查看該地址就可以知道是什么函數!然后根據函數名查看相關的資料,就可以知道這個應用程序的基本編程思路,這個功能對程序員很有用。

      了解了基本知識,現在就就可以編程了。首先建立一個窗口,在窗口上加上一個TabControl分頁控件,在第一頁加上label1,label2,listbox1,listbox2,button1。在第二頁上加上label4,label6,listbox3,listbox4,在第三頁上加上label5,label7,listbox5,listbox6。將所有的listbox控件的HorizontalScrollbar屬性設置為true

      然后添加如下代碼(vb.net編寫)

    Public Class Form1
    Inherits System.Windows.Forms.Form
    Public zj
    Public myProcesses() As Process
    Public myProcess As Process
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ListBox1.Items.Clear()
    myProcesses = Process.GetProcesses()
    For Each myProcess In myProcesses
    ListBox1.Items.Add(myProcess.ProcessName)
    Next
    Label1.Text = ""
    Label1.Text = "本機共有" & ListBox1.Items.Count & "個進程在運行"
    End Sub

    Private Sub ListBox1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick
    Dim i : Dim f As Integer : Dim h As Integer
    ListBox2.Items.Clear()
    zj = ListBox1.SelectedIndex
    Label2.Text = "進程" & ListBox1.Items.Item(zj) & "的相關信息"
    With ListBox2.Items
    If myProcesses(zj).MainWindowTitle = "" Then
    .Add("無相關主窗口")
    Else
    .Add(myProcesses(zj).MainWindowTitle)
    End If
    .Add(myProcesses(zj).BasePriority & "進程的基本優先級")
    .Add(myProcesses(zj).Handle.ToString & "進程的本機句柄")
    .Add(myProcesses(zj).HandleCount & "進程打開的句柄數")
    .Add(myProcesses(zj).Id & "進程的唯一標識符")
    .Add(myProcesses(zj).MachineName & "進程正在其上運行的計算機的名稱")
    .Add(myProcesses(zj).MainModule.ToString & "進程的主模塊")
    .Add(myProcesses(zj).MainWindowHandle.ToString & "進程主窗口的句柄")
    .Add(myProcesses(zj).Modules & "")
    .Add(myProcesses(zj).NonpagedSystemMemorySize & "分配給此進程的未分頁的系統內存大小")
    .Add(myProcesses(zj).PagedMemorySize & "分頁的內存大小")
    .Add(myProcesses(zj).PagedSystemMemorySize & "分頁的系統內存大小")
    .Add(myProcesses(zj).PeakPagedMemorySize & "峰值分頁內存大小")
    .Add(myProcesses(zj).PeakVirtualMemorySize & "峰值虛擬內存大小")
    .Add(myProcesses(zj).PrivateMemorySize & "專用內存大小")
    .Add(myProcesses(zj).StartTime & "進程啟動的時間")
    .Add(myProcesses(zj).TotalProcessorTime.Seconds & "進程的總的處理器時間")
    .Add(myProcesses(zj).UserProcessorTime.Seconds & "進程的用戶處理器時間")
    .Add(myProcesses(zj).VirtualMemorySize & "進程的虛擬內存大小")
    End With
    ListBox3.Items.Clear()
    TabPage1.Text = "進程" & ListBox1.Items.Item(zj) & "的基本信息"
    TabPage2.Text = "進程" & ListBox1.Items.Item(zj) & "相關的線程信息"
    TabPage3.Text = "進程" & ListBox1.Items.Item(zj) & "相關的模塊信息"
    /////////////////////////////////////////////
    f = myProcesses(zj).Threads.Count
    Label4.Text = "進程" & ListBox1.Items.Item(zj) & "共有" & f & "個相關的線程,線程ID信息如下:"
    Dim int, pk, m, n
    For n = 0 To f - 1
    ListBox3.Items.Add(myProcesses(zj).Threads(n).Id)
    Next
    ///////////////////////////////////////

    ListBox5.Items.Clear()
    Dim zha, kl
    zha = myProcesses(zj).Modules.Count
    Label5.Text = "與進程" & ListBox1.Items.Item(zj) & "共有" & zha & "個相關的模塊,模塊位置信息如下:"
    For kl = 0 To zha - 1
    ListBox5.Items.Add(myProcesses(zj).Modules(kl).FileName)
    Next
    End Sub

    Private Sub ListBox3_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox3.DoubleClick
    ListBox4.Items.Clear()
    Dim f, n
    f = myProcesses(zj).Threads.Count
    n = ListBox3.SelectedIndex
    Label6.Text = "線程" & ListBox3.Items.Item(n) & "相關信息"
    With ListBox4.Items‘與進程相關的線程信息見System.Diagnostics.processThread類。因為Processes.threads屬性是返回thread對象數組而thread對象數組的實例是由ProcessThread類來創建,thread對象數組的信息是包含在System.Diagnostics. ProcessThread類中。
    .Add(myProcesses(zj).Threads(n).BasePriority)
    .Add(myProcesses(zj).Threads(n).CurrentPriority)
    .Add(myProcesses(zj).Threads(n).PriorityLevel)
    .Add(myProcesses(zj).Threads(n).PrivilegedProcessorTime)
    .Add(myProcesses(zj).Threads(n).StartTime)
    .Add(myProcesses(zj).Threads(n).ThreadState.ToString)
    .Add(myProcesses(zj).Threads(n).TotalProcessorTime.Seconds)
    .Add(myProcesses(zj).Threads(n).UserProcessorTime.Seconds)
    .Add(myProcesses(zj).Threads(n).WaitReason.ToString)
    End With
    End Sub

    Private Sub ListBox5_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox5.DoubleClick
    ListBox6.Items.Clear()
    Dim f, n, m
    f = myProcesses(zj).Modules.Count
    n = ListBox5.SelectedIndex
    Label7.Text = "模塊" & ListBox5.Items.Item(n) & "相關信息"
    With ListBox6.Items‘與進程相關的模塊信息見System.Diagnostics. ProcessModule類,因為Processes.Modules屬性是返回Modules對象數組而Modules對象數組的實例是由ProcessModule類來創建,Modules對象數組的信息是包含在System.Diagnostics. ProcessModule類中。
    m = Hex(myProcesses(zj).Modules(n).BaseAddress.ToInt32)‘轉換成16進制
    .Add(m)
    m = Hex(myProcesses(zj).Modules(n).EntryPointAddress.ToInt32)
    .Add(m)
    .Add(myProcesses(zj).Modules(n).FileVersionInfo)
    .Add(myProcesses(zj).Modules(n).ModuleMemorySize)
    .Add(myProcesses(zj).Modules(n).ModuleName)
    End With
    End Sub

      End Class 這下就大工告成了,最后對程做一點補充說明,各位讀者,當你知道了如何編寫這個程序時,你可能會想如果只是寫一個單純的這個程序你可能會覺得沒什么意義,那如何才可以將這段程序發揮他更大的意義?就讓我來告訴你。其實這段代碼并不是我刻意編寫的,而是一個局域網中的遠程控制的一部分。掃描客戶機上運行的進程,查看客戶機的資源,將獲得的信息發個服務器,并可以通過Processes類來關閉客戶機上的進程,以便管理者對客戶機進行管理。此外寫這篇文章的另一個目的是希望讀者更快的掌握.net中System.Diagnostics.Process,System.Diagnostics.processThread,System.Diagnostics. ProcessModule類。在vb.net和win2000通過 。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>