.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则不会出现这样的情况。当然这两个方法使用哪个合理,就看你的应用程序的用途了。
