进程实作(使用.Net平台)
今天继续看进程,并用.Net平台作几个进程的实例。
1.获得本用户的“我的文档”目录,获得当前应用程序目录(无关进程知识):
当然,Environment.SpecialFolder下还有好多属性选项。比如:
| Cookies | 用作 Internet Cookie 的公共储存库的目录。 |
| Desktop | 逻辑桌面,而不是物理文件系统位置。 |
| DesktopDirectory | 用于物理上存储桌面上的文件对象的目录。
不应将此目录与桌面文件夹本身混淆,后者是虚拟文件夹。 |
| Favorites | 用作用户收藏夹项的公共储存库的目录。 |
| History | 用作 Internet 历史记录项的公共储存库的目录。 |
| InternetCache | 用作 Internet 临时文件的公共储存库的目录。 |
| LocalApplicationData | 目录,它用作当前非漫游用户使用的应用程序特定数据的公共储存库。 |
| MyComputer | “我的电脑”文件夹。 |
| MyMusic | “My Music”文件夹。 |
| MyPictures | “My Pictures”文件夹。 |
2.启动某个进程:
在.Net中启动某个进程是比较简单的事,只要创建Process对象,然后设置Process.StartInfo选项即可启动某个外部进程了。比如,我要在程序中打开某个Word文件:
当然,还有更简单的方法,都无需实例化Process对象,只需调用Process的静态方法Start即可:
最简单的,Process.Start("E:\\1.doc");一句话即可调用外部进程。
3.关闭进程
关闭进程有两种方法:
(1)如果进程有图形界面窗口,则调用CloseMainWindow()函数。
(2)如果是Console窗口,则调用Kill()函数。
比如,上面的进程则可以这样关闭:
process.WindowMainWindow();
一个问题,如果持有进程的对象,则可以调用它来关闭进程,但是,我并不持有进程的对象的情况怎么办?就像第二种打开进程方法,根本就没有进程对象嘛。
MSDN是这样解决的:
processes = Process.GetProcessesByName("WINWORD");
foreach(Process process in processes)
{
process.CloseMainWindow();
}
4.确定进程是否正在响应:
调用进程对象的Responding属性,如,下面程序查看Notepad.exe进程是否会响应,如是,则用CloseMainWindow关闭进程,如不会响应,则用Kill强制关闭进程:
5.确定进程是否已经退出:
调用Process的HasExit属性。则可确定进程有无退出。
6.实例:
做了一个枚举所有进程的实例,在.net下面实现比较简单,所有的东西都给封装好了。源代码两行就可以把所有进程列举出来了。
(1)列举所有进程,显示在ComboBox类型的CBProcesses对象中。
(2)进程地址空间中加载了很多模块(即DLL,EXE文件),把它们列举出来。放在ListBox类型的LBProcesses中:
(3)显示进程的一些详细信息:
这个都是调用Process对象中的一些方法,以获得其信息,MSDN中有详细介绍,需要时可翻MSDN:
string ProcPID = "PID(进程标识符):"+process[0].Id.ToString(); //进程标识符
string ProcCPU = "CPU使用总时间:"+process[0].TotalProcessorTime.TotalMinutes.ToString()+"分钟"; //CPU使用,以分钟表示
string ProcCPUTime = "获得此时间用户的CPU时间:"+process[0].UserProcessorTime.TotalMinutes.ToString()+"分钟"; //CPU时间,以分钟表示
string ProcMemory = "内存使用:"+(process[0].WorkingSet/1024).ToString()+" KB";
string ProcPriority ="优先级:"+process[0].BasePriority.ToString();
浙公网安备 33010602011771号