.Net中的对进程的操作

IT商界

  认识进程

  进程的英文表示是Process,所以凡是类名中含有Process的都是与进程有关的类。用最简短的话来说,进程就是当前运行的应用程序。运行的应用程序包括EXE、DLL这两种文件。文件和进程的差别在于文件是保存在磁盘上的,是静止的,而进程是非静止的。正是由于这个原因,所以计算机每调用一个进程就需要一定的资源。这些资源包括内存、虚拟页面、GDI等。

  VB.Net中的进程类

  在VB.Net中我们可以用Process 类,即进程类来对计算机上运行的进程进行访问。它包括下面两个方面。

  1.使用 Process类,可以获取计算机中当前运行的进程的列表(包括后台进程),或者启动一个新的进程。

  2.可使用该类来获取当前运行的进程的相关信息。如进程的编号。

  现在我们就通过一个实际的例子来看看如何在VB.Net中进行进程的编程。这个例子将模仿Win NT,Win 2000,Win XP的任务管理器,列举出计算机中的所有在运行的进程,并结束指定的进程。

  做个任务管理器

  首先建立一个窗口,在窗口上添加Button1、Listbox1、Label1三个控件。将所有的Listbox控件的HorizontalScrollbar属性设置为true。Button1的text属性为“获得本机进程”,其余控件保持默认属性。

  在代码的开头声明对象使它在整个程序段中可用。

  Public Class Form1

  Inherits System.Windows.Forms.Form

  Public zj'用来获得在listbox1中进程的编号,此变量在整个程序段中都有用

  Public myProcesses() As Process'声明一个进程数组来存放检查到的进程

  Public myProcess As Process'声明一个进程对象来检查有哪些进程在运行,并且将找到的进程放入进程数组中

  双击Button1控件在Click事件添加如下代码:

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  ListBox1.Items.Clear()'清空listbox1

  myProcesses = Process.GetProcesses()'创建刚才声明的进程数组,使它可用

  For Each myProcess In myProcesses

  ListBox1.Items.Add(myProcess.Process Name)'此循环开始检查计算机中有多少个进程在运行,并将找到的进程名加入到列表框中

  Next

  Label1.Text = ""'将label清空

  Label1.Text = "本机共有" & ListBox

  1.Items.Count & "个进程在运行"'在label中显示

  End Sub

  程序说明:本段代码通过一个循环将找到的进程添加到列表框中,从而显示计算机中到底有多少个进程在运行。在这段代码中的重点是FOR循环,它不同于计次循环,它是通过一种称为迭代的方法进行的有条件的循环,即首先检查是否有一个进程在运行,如有则加入列表框中,再检查是否有第二个进程在运行,如有再加入列表框中,依此类推直到检查到计算机中没有进程在运行时,才停止循环。

  双击ListBox1控件在DoubleClick事件添加如下代码:

  Private Sub ListBox1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick

  Dim i As Integer

  zj = ListBox1.SelectedIndex'在双击ListBox1中的进程名时将此进程的编号传递给zj这个变量进行保存

  i = myProcesses(zj).Id'获得进程的编号

  Dim myProceId As Process = Process.GetProcessById(i)'声明与此编号相关的进程

  myProceId.Kill()'关闭进程

  End Sub

  End Class

  程序说明:当双击列表框的时候,将把列表框中选中的项传递到进程数组中,然后通过进程数组确定进程的ID并传递给新的进程对象。让此对象和要关闭的进程进行绑定,最后使用kill关闭这个指定的进程。

  总 结

  本文通过编写一个进程查看器,对.Net中的Process类进行了讲解。其实除了Process类外,与进程有关的类还包括下面两个重要的类ProcessThread和ProcessModule。这两个类可以说是Process的辅助类,它们分别表示与进程相关的线程类和与进程相关的模块类。使用这两个类我们可以实现查看进程在运行时,启动了多少模块和线程。对于这两个类的使用由于并不复杂本文也就没做讲解了。如果有兴趣的话可以看看MSDN中对这两个类的说明,你将会发现通过它们将可以编写一个比系统更强大的进程监视软件。

  此外 本代码使用的是Kill来关闭运行的进程,其实在Process类中还有一个关闭进程的方法──CloseMainWindow。两者的差别是:使用Kill是告诉系统强行终止运行进程,而CloseMainWindow是当进程有主窗口的时候,会检查当前的进程是否有数据需要保留,如果有则会提示用户,如果没有则存盘无法关闭进程。使用Kill则不会出现这样的情况。当然这两个方法使用哪个合理,就看你的应用程序的用途了。