得到系统进程和结束某个指定的进程

得到系统进程和结束某个指定的进程


Author:unknown&;nbspFrom:Internet看到这篇文章,关闭指定的IE实例:

http://www.c-sharpcorner.com/Code/2002/Mar/CaptRunIEInstances.asp



自己想了另一个办法来作



先修改注册表:

HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Service\\PerfProc\\Performance

下的:Disable Performance Counters 的值改为0



得到系统当前进程,加入到listBox中:

System.Diagnostics.Process[] processOnComputer = System.Diagnostics.Process.GetProcesses();

foreach ( System.Diagnostics.Process p in processOnComputer )

{

    this.listBox1.Items.Add(p.ProcessName);

}



关闭某个指定的进程:

System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName(this.listBox1.SelectedItem.ToString());

 

foreach ( System.Diagnostics.Process p in process)

{

    p.Kill();

}



但是这样会关闭进程的所有实例,比如如果你打开了多个IE,会把所有的IE窗口都关闭。



下面实现关闭某个特定的IE实例

先声明一个ArrayList:

ArrayList windowHandle = new ArrayList();



得到指定进程的所有实例,放到一个ListBox中,同时把主窗口的Handle放到ArrayList中:

System.Diagnostics.Process[] processOnComputer = System.Diagnostics.Process.GetProcessesByName(this.listBox1.SelectedItem.ToString());

  foreach ( System.Diagnostics.Process p in processOnComputer )

  {

    this.listBox2.Items.Add(p.MainWindowTitle);//在ListBox中显示主窗体的标题

    windowHandle.Add(p.MainWindowHandle);

}



把指定的进程的主窗口的Handle和ArrayList中的比对,如果符合就关闭 

System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName(this.listBox1.SelectedItem.ToString());

  foreach ( System.Diagnostics.Process p in process )

  {

    if ( p.MainWindowHandle == (System.IntPtr)(windowHandle[this.listBox2.SelectedIndex]))

    {

    p.Kill();

    this.listBox2.Items.RemoveAt(this.listBox2.SelectedIndex);

    }

  }

 

这样可以关闭有主窗体的进程,但是没有主窗体的还不行

还请大家多多指教  (2005-7-22:09:25)

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [C#] 的这些文章也感兴趣:

编写自己的PING工具
使用C#创建邮件发送组件(SMTP)
C#实现窗体和任意控件的拖动
.NET中的特殊类型成员
c#写的五子棋程序
基于C#的接口基础教程之五(2)
C#排序算法大全
使用C#2.0进行文件压缩和解压
开发者面临的.Net挑战(三)
Visual C#2005中使用正则表达式