C#实现启动,关闭与查找进程的方法

作者:Jimmy.Yang 时间:2023-01-12 23:27:35 

本文实例讲述了C#实现启动,关闭与查找进程的方法。分享给大家供大家参考,具体如下:

运行效果截图如下:

C#实现启动,关闭与查找进程的方法

查找/列出进程很容易,但干掉进程得借助系统命令ntsd.exe,详细用法见下面的代码 :


using System;
using System.Diagnostics;
using System.Windows.Forms;
namespace ProcessDemo
{
 public partial class Form1 : Form
 {
   public Form1()
   {
     InitializeComponent();
   }
   private void Form1_Load(object sender, EventArgs e)
   {
     this.linkLabel1.Links.Add(0, linkLabel1.Text.Length, "https://www.jb51.net/");
   }
   private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
   {
     this.linkLabel1.Links[linkLabel1.Links.IndexOf(e.Link)].Visited = true;
     string target = e.Link.LinkData as string;
     if (target != null && target.StartsWith("http://"))
     {
       Process.Start(target);
     }
   }
   /// <summary>
   /// 列出所有可访问进程
   /// </summary>
   /// <param name="sender"></param>
   /// <param name="e"></param>
   private void btnList_Click(object sender, EventArgs e)
   {
     Process[] processes;
     processes = Process.GetProcesses();
     string str = "";
     foreach (Process p in processes)
     {
       try
       {
         str = p.ProcessName;
         this.lst1.Items.Add("名称:" + p.ProcessName + ",启动时间:" + p.StartTime.ToShortTimeString() + ",进程ID:" + p.Id.ToString() );
       }
       catch (Exception ex)
       {
         this.lst1.Items.Add(ex.Message.ToString());//某些系统进程禁止访问,所以要加异常处理
       }
     }
   }
   private void btnFind_Click(object sender, EventArgs e)
   {
     txtFind.Text = txtFind.Text.Trim().ToLower();
     if (txtFind.Text.Length > 0)
     {
       Process[] arrP = Process.GetProcesses();
       foreach (Process p in arrP)
       {
         try
         {
           if (p.ProcessName.ToLower() == txtFind.Text)
           {
             MessageBox.Show(txtFind.Text + " 找到了,PID为 " + p.Id.ToString());
             return;
           }
         }
         catch { }
       }
       MessageBox.Show("未找到该进程,请检查输入!");
     }
   }
   private void btnKill_Click(object sender, EventArgs e)
   {
     txtFind.Text = txtFind.Text.Trim().ToLower();
     int pid = -1;
     if (txtFind.Text.Length > 0)
     {
       Process[] arrP = Process.GetProcesses();
       foreach (Process p in arrP)
       {
         try
         {
           if (p.ProcessName.ToLower() == txtFind.Text)
           {
             pid = p.Id;
             break;
           }
         }
         catch { }
       }
       if (pid != -1)
       {
         RunCmd("ntsd -c q -p " + pid);
       }
     }
   }
   /// <summary>
   /// 运行DOS命令
   /// DOS关闭进程命令(ntsd -c q -p PID )PID为进程的ID
   /// </summary>
   /// <param name="command"></param>
   /// <returns></returns>
   public string RunCmd(string command)
   {
     Process p = new Process();
     p.StartInfo.FileName = "cmd.exe";
     p.StartInfo.Arguments = "/c " + command;
     p.StartInfo.UseShellExecute = false;
     p.StartInfo.RedirectStandardInput = true;
     p.StartInfo.RedirectStandardOutput = true;
     p.StartInfo.RedirectStandardError = true;
     p.StartInfo.CreateNoWindow = true;
     p.Start();
     return p.StandardOutput.ReadToEnd();
   }
 }
}

另外ntsd.exe在windows vista以上的版本(包括windows 2008)上,出于安全考虑已经被MS给去掉了,但我们可以直接从xp下复制过来继续使用,这里为方便大家给出ntsd.exe的下载。
希望本文所述对大家C#程序设计有所帮助。

标签:C#,进程
0
投稿

猜你喜欢

  • C# 鼠标穿透窗体功能的实现方法

    2021-09-26 04:24:38
  • java selenium Selenium IDE介绍及用法

    2023-11-21 06:41:22
  • C#实现排列组合算法完整实例

    2023-04-16 09:36:59
  • IDEA启动tomcat控制台中文乱码问题的解决方法(100%有效)

    2021-06-25 10:45:23
  • Java应用多机器部署解决大量定时任务问题

    2023-10-28 17:07:17
  • Mybatis 逆向工程的三种方法详解

    2023-08-10 22:27:20
  • Java synchronized轻量级锁实现过程浅析

    2022-05-08 07:28:55
  • Mybatis注解增删改查的实例代码

    2022-03-31 01:26:15
  • 自定义滑动按钮为例图文剖析Android自定义View绘制

    2023-06-05 01:34:34
  • Android开发实现的IntentUtil跳转多功能工具类【包含视频、音频、图片、摄像头等操作功能】

    2023-05-27 23:58:01
  • C#文件流读写和进度回调示例详解

    2022-08-12 14:52:31
  • C#如何操作Excel数据透视表

    2021-09-01 20:18:42
  • Android 中糟糕的AsyncTask

    2022-07-09 00:43:35
  • Java中BufferedReader与BufferedWriter类的使用示例

    2022-10-30 01:00:04
  • Spring动态配置计时器触发时间的实例代码

    2023-01-20 07:30:01
  • Spring-AOP @AspectJ进阶之如何绑定代理对象

    2022-05-31 16:08:38
  • zookeeper watch机制的理解

    2021-11-08 11:36:36
  • C#表达式树讲解

    2023-02-23 19:22:52
  • Mybatis返回插入的主键问题解决方案

    2023-05-06 02:58:03
  • 浅谈C#单例模式的实现和性能对比

    2022-10-29 10:46:30
  • asp之家 软件编程 m.aspxhome.com