VB.NET Process类

  1. 在向大家详细介绍VB.NET Process类之前,首先让大家了解下ptm是什么,然后全面介绍VB.NET Process类。首先对文章名做一个解示,p是代表Process,即进程,t是代表Thread,即线程,m是代表Module,即模块。

    在 win nt,win 2000,win xp中都有一个性能查看器,我们可以用它来查看计算机上正在运行的程序,获得与程序相关的主窗口名,和查看cpu和内存,虚拟页面的使用情况。但是对于更高要求的计算机使用人员来说,这些是不够的,特别是一些diy的发烧友,他们希望自己可以随时对自己的计算机进行查看,了解更多的信息从而可以知道自己的计算机是否应该升级了,是否该对虚拟页面做出调整,是否该换cpu,还是增加内存。

    由于以上情况,所以我们完全有理由做一个更好的查看器。在进行编写代码以前我们还需要知道一些基本知识,即proccess,thread,module。现在我们先来学习一下proecss的基本知识。

    VB.NET Process类的概念

    用最简短的话来说,进程就是当前运行的应用程序。运行的应用程序包括exe,dll这两种文件。文件和进程的差别在与,文件是保存在磁盘上的,是静止的,计算机不会去调用文件,而进程是非静止的,正是由于着个原因,所以计算机每调用一个进程就需要一定的资源。这些资源包括内存,虚拟页面,句柄,gdi……

    在.net中我门可以用VB.NET Process类,(他位于System.Diagnostics空间中)提供对正在计算机上运行的进程的访问。使用VB.NET Process类,可以获取当前运行的进程的列表,或者启动新的进程。VB.NET Process类用于访问系统进程。初始化VB.NET Process类后,可使用该类来获取有关当前运行的进程的信息。此类信息包括线程集、加载的模块(.dll 和 .exe 文件)和性能信息(如进程当前使用的内存量)。

    系统进程在系统上由其进程标识符唯一标识。与许多 Windows 资源一样,进程也由其句柄标识,而句柄在计算机上可能不唯一。句柄是表示资源标识符的一般术语。即使进程已退出,操作系统仍保持进程句柄,该句柄通过 Process 组件的 Handle 属性访问。因此,可以获取进程的管理信息,如 ExitCode(通常,或者为零表示成功,或者为非零错误代码)和 ExitTime。句柄是非常有价值的资源。

  2. Public Class Form1  
  3. Inherits System.Windows.Forms.Form  
  4. Public zj  
  5. Public myProcesses() As Process  
  6. Public myProcess As Process  
  7. Private Sub Button1_Click(ByVal sender As System.Object, 
    ByVal e As System.EventArgs) Handles Button1.Click  
  8. ListBox1.Items.Clear()  
  9. myProcesses = Process.GetProcesses()  
  10. For Each myProcess In myProcesses  
  11. ListBox1.Items.Add(myProcess.ProcessName)  
  12. Next  
  13. Label1.Text = "" 
  14. Label1.Text = "本机共有" & ListBox1.Items.Count & "个进程在运行"  
  15. End Sub  
  16.  
  17. Private Sub ListBox1_DoubleClick(ByVal sender As System.Object, 
    ByVal e As System.EventArgs) Handles ListBox1.DoubleClick  
  18. Dim i : Dim f As Integer : Dim h As Integer  
  19. ListBox2.Items.Clear()  
  20. zj = ListBox1.SelectedIndex  
  21. Label2.Text = "进程" & ListBox1.Items.Item(zj) & "的相关信息"  
  22. With ListBox2.Items  
  23. If myProcesses(zj).MainWindowTitle = "" Then  
  24. .Add("无相关主窗口")  
  25. Else  
  26. .Add(myProcesses(zj).MainWindowTitle)  
  27. End If  
  28. .Add(myProcesses(zj).BasePriority & "进程的基本优先级")  
  29. .Add(myProcesses(zj).Handle.ToString & "进程的本机句柄")  
  30. .Add(myProcesses(zj).HandleCount & "进程打开的句柄数")  
  31. .Add(myProcesses(zj).Id & "进程的唯一标识符")  
  32. .Add(myProcesses(zj).MachineName & "进程正在其上运行的计算机的名称")  
  33. .Add(myProcesses(zj).MainModule.ToString & "进程的主模块")  
  34. .Add(myProcesses(zj).MainWindowHandle.ToString & "进程主窗口的句柄")  
  35. '.Add(myProcesses(zj).Modules & "")  
  36. .Add(myProcesses(zj).NonpagedSystemMemorySize & "分配给此进程的未分页的系统内存大小")  
  37. .Add(myProcesses(zj).PagedMemorySize & "分页的内存大小")  
  38. .Add(myProcesses(zj).PagedSystemMemorySize & "分页的系统内存大小")  
  39. .Add(myProcesses(zj).PeakPagedMemorySize & "峰值分页内存大小")  
  40. .Add(myProcesses(zj).PeakVirtualMemorySize & "峰值虚拟内存大小")  
  41. .Add(myProcesses(zj).PrivateMemorySize & "专用内存大小")  
  42. .Add(myProcesses(zj).StartTime & "进程启动的时间")  
  43. .Add(myProcesses(zj).TotalProcessorTime.Seconds & "进程的总的处理器时间")  
  44. .Add(myProcesses(zj).UsERProcessorTime.Seconds & "进程的用户处理器时间")  
  45. .Add(myProcesses(zj).VirtualMemorySize & "进程的虚拟内存大小")  
  46. End With  
  47. ListBox3.Items.Clear()  
  48. TabPage1.Text = "进程" & ListBox1.Items.Item(zj) & "的基本信息"  
  49. TabPage2.Text = "进程" & ListBox1.Items.Item(zj) & "相关的线程信息"  
  50. TabPage3.Text = "进程" & ListBox1.Items.Item(zj) & "相关的模块信息"  
  51. '/  
  52. f = myProcesses(zj).Threads.Count  
  53. Label4.Text = "进程" & ListBox1.Items.Item(zj) & "共有" & f & "个相关的线程,线程ID信息如下:"  
  54. Dim int, pk, m, n  
  55. For n = 0 To f - 1  
  56. ListBox3.Items.Add(myProcesses(zj).Threads(n).Id)  
  57. Next  
  58. '///  
  59.  
  60. ListBox5.Items.Clear()  
  61. Dim zha, kl  
  62. zha = myProcesses(zj).Modules.Count  
  63. Label5.Text = "与进程" & ListBox1.Items.Item(zj) & "共有" & zha & "个相关的模块,模块位置信息如下:"  
  64. For kl = 0 To zha - 1  
  65. ListBox5.Items.Add(myProcesses(zj).Modules(kl).FileName)  
  66. Next  
  67. End Sub  
  68.  
  69. Private Sub ListBox3_DoubleClick(ByVal sender As Object, 
    ByVal e As System.EventArgs) Handles ListBox3.DoubleClick  
  70. ListBox4.Items.Clear()  
  71. Dim f, n  
  72. f = myProcesses(zj).Threads.Count  
  73. n = ListBox3.SelectedIndex  
  74. Label6.Text = "线程" & ListBox3.Items.Item(n) & "相关信息"  
  75. With ListBox4.Items‘与进程相关的线程信息见System.Diagnostics.processThread类。
    因为 Processes.threads属性是返回thread对象数组而thread对象数组的实例是由ProcessThread类来创建,
    thread 对象数组的信息是包含在System.Diagnostics. ProcessThread类中。  
  76. .Add(myProcesses(zj).Threads(n).BasePriority)  
  77. .Add(myProcesses(zj).Threads(n).CurrentPriority)  
  78. .Add(myProcesses(zj).Threads(n).PriorityLevel)  
  79. .Add(myProcesses(zj).Threads(n).PrivilegedProcessorTime)  
  80. .Add(myProcesses(zj).Threads(n).StartTime)  
  81. .Add(myProcesses(zj).Threads(n).ThreadState.ToString)  
  82. .Add(myProcesses(zj).Threads(n).TotalProcessorTime.Seconds)  
  83. .Add(myProcesses(zj).Threads(n).UserProcessorTime.Seconds)  
  84. .Add(myProcesses(zj).Threads(n).WaitReason.ToString)  
  85. End With  
  86. End Sub  
  87.  
  88. Private Sub ListBox5_DoubleClick(ByVal sender As Object, 
    ByVal e As System.EventArgs) Handles ListBox5.DoubleClick  
  89. ListBox6.Items.Clear()  
  90. Dim f, n, m  
  91. f = myProcesses(zj).Modules.Count  
  92. n = ListBox5.SelectedIndex  
  93. Label7.Text = "模块" & ListBox5.Items.Item(n) & "相关信息"  
  94. With ListBox6.Items‘与进程相关的模块信息见System.Diagnostics. ProcessModule类,
    因为Processes.Modules属性是返回Modules对象数组而Modules对象数组的实例是由 ProcessModule类来创建,
    Modules对象数组的信息是包含在System.Diagnostics. ProcessModule类中。  
  95. m = Hex(myProcesses(zj).Modules(n).BaseAddress.ToInt32)‘转换成16进制  
  96. .Add(m)  
  97. m = Hex(myProcesses(zj).Modules(n).EntryPointAddress.ToInt32)  
  98. .Add(m)  
  99. .Add(myProcesses(zj).Modules(n).FileVersionInfo)  
  100. .Add(myProcesses(zj).Modules(n).ModuleMemorySize)  
  101. .Add(myProcesses(zj).Modules(n).ModuleName)  
  102. End With  
  103. End Sub  

最后对程做一点补充说明,各位读者,当你知道了如何编写这个程序时,你可能会想如果只是写一个单纯的这个程序你可能会觉得没什么意义,那如何才可以将这段程序发挥他更大的意义?就让我来告诉你。其实这段代码并不是我刻意编写的,而是一个局域网中的远程控制的一部分。扫描客户机上运行的进程,查看客户机的资源,将获得的信息发个服务器,并可以通过VB.NET Process类来关闭客户机上的进程,以便管理者对客户机进行管理。此外写这篇文章的另一个目的是希望读者更快的掌握.net中 System.Diagnostics.Process,System.Diagnostics.processThread,System.Diagnostics. ProcessModule类。在VB.NET和win2000通过 。

最后对程做一点补充说明,各位读者,当你知道了如

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值