程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 得到系統進程和結束某個指定的進程

得到系統進程和結束某個指定的進程

編輯:C#入門知識

看到這篇文章,關閉指定的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);
    }
   }
  
這樣可以關閉有主窗體的進程,但是沒有主窗體的還不行
還請大家多多指教

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved