My FAQ,最新最全的IT技术FAQ
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 未整理篇 | 技术讨论
  当前位置: > 程序开发 > 编程语言 > .NET > C#
得到系统进程和结束某个指定的进程
作者:未知 时间:2005-08-07 21:12 出处:编程爱好者网站 责编:My FAQ
              摘要:得到系统进程和结束某个指定的进程
看到这篇文章,关闭指定的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);
    }
   }
  
这样可以关闭有主窗体的进程,但是没有主窗体的还不行
还请大家多多指教

 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 myfaq.com.cn All rights reserved. www.myfaq.com.cn 版权所有