C#进程监控方法实例分析
作者:程序猴 发布时间:2021-09-16 03:25:47
标签:C#,进程,监控
本文实例讲述了C#进程监控方法。分享给大家供大家参考。具体如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
namespace ProcessMonitor
{
public partial class Form1 : Form
{
Process[] myProcess;
public Form1()
{
InitializeComponent();
dataGridView1.AllowUserToAddRows = false;
dataGridView1.AutoResizeColumns();
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
dataGridView1.MultiSelect = false;
}
private void Form1_Load(object sender, EventArgs e)
{
GetAllProcess();
}
private void GetAllProcess()
{
dataGridView1.Rows.Clear();
myProcess = Process.GetProcesses();
foreach (Process p in myProcess)
{
int newRowIndex = dataGridView1.Rows.Add();
DataGridViewRow row = dataGridView1.Rows[newRowIndex];
row.Cells[0].Value = p.Id;
row.Cells[1].Value = p.ProcessName;
row.Cells[2].Value = string.Format("{0:###,##0.00}MB", p.WorkingSet64 / 1024.0f / 1024.0f);
//有些进程无法获取启动时间和文件名信息,所以要用try/catch
try
{
row.Cells[3].Value = string.Format("{0}", p.StartTime);
row.Cells[4].Value = p.MainModule.FileName;
}
catch
{
row.Cells[3].Value = "";
row.Cells[4].Value = "";
}
}
}
private void ShowProcessInfo(Process p)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("进程名称:" + p.ProcessName + ", ID:" + p.Id);
try
{
sb.AppendLine("进程优先级:" + p.BasePriority + "(优先级类别: " + p.PriorityClass + ")");
ProcessModule m = p.MainModule;
sb.AppendLine("文件名:" + m.FileName);
sb.AppendLine("版本:" + m.FileVersionInfo.FileVersion);
sb.AppendLine("描述:" + m.FileVersionInfo.FileDescription);
sb.AppendLine("语言:" + m.FileVersionInfo.Language);
sb.AppendLine("------------------------");
if (p.Modules != null)
{
ProcessModuleCollection pmc = p.Modules;
sb.AppendLine("调用的模块(.dll):");
for (int i = 1; i < pmc.Count; i++)
{
sb.AppendLine(
"模块名:" + pmc[i].ModuleName + "\t" +
"版本:" + pmc[i].FileVersionInfo.FileVersion + "\t" +
"描述:" + pmc[i].FileVersionInfo.FileDescription);
}
}
}
catch
{
sb.AppendLine("其他信息:无法获取");
}
this.richTextBox1.Text = sb.ToString();
}
private void buttonRefresh_Click(object sender, EventArgs e)
{
GetAllProcess();
}
private void dataGridView1_MouseClick(object sender, MouseEventArgs e)
{
//DataGridView.HitTestInfo h = dataGridView1.HitTest(e.X, e.Y);
//if (h.Type== DataGridViewHitTestType.Cell || h.Type == DataGridViewHitTestType.RowHeader)
//{
// dataGridView1.Rows[h.RowIndex].Selected = true;
// int processeId = (int)dataGridView1.CurrentRow.Cells[0].Value;
// ShowProcessInfo(Process.GetProcessById(processeId));
//}
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
try
{
if (e.RowIndex >= 0)
{
int processId = (int)dataGridView1.Rows[e.RowIndex].Cells[0].Value;
ShowProcessInfo(Process.GetProcessById(processId));
}
}
catch(Exception ex)
{
MessageBox.Show("发生异常,原因是:" + ex.Message);
}
}
}
}
希望本文所述对大家的C#程序设计有所帮助。


猜你喜欢
- 1. Spring框架的注解式开发# Spring框架的注解式(Annotation)开发1. 注解式开发定义:通过Spring框架提供的一
- 概念理解Properties 继承于 Hashtable。表示一个持久的属性集,属性列表以key-value的形式存在,key和value都
- 获取Token/// <summary> /// 获取Token &nbs
- IntInt是Java八种基本数据类型之一,一般大小为4字节32位,取值范围为2-31—231。两个Int类型变量用“==”比较的是值的大小
- 基本思想归并排序采取分治的思想进行排序,借用一张图片说明一下将n个元素从中间切开,分成两部分。(左边可能比右边多1个数) 将步骤1分成的两部
- 求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转
- 目录简单介绍具体实现首先,咱们先配置一下相关的jar包(pom.xml)创建一个Pet接口,存放方法say()创建一个Person类创建一个
- Java的源代码是以*.java的纯文本文件,可以使用任何文本编辑器来进行编写,但是这个源代码是无法执行的。执行源代码的这个任务就需要JDK
- 测试springboot项目出现Test Ignored今天在写springBoot项目运行测试类时出现了以下问题:Test ignored
- 看到很多人解析歌词文件时写了一大片的字符处理代码,而且看得不是很明白,所以自己研究了一下, 首先来了解下Lrc文件 时间
- Spring security 重写Filter实现json登录在使用SpringSecurity中,大伙都知道默认的登录数据是通过key/
- Java自定义异常类的实例详解为什么要自己编写异常类?假如jdk里面没有提供的异常,我们就要自己写。我们常用的类ArithmeticExce
- 以下是SpringBoot项目中的常用配置类、jar包坐标等通用配置pom文件<!-- --><!-- 自定义配置文件
- 前言之前写过一篇关于配置中心对配置内容加密解密的介绍:《Spring Cloud构建微服务架构:分布式配置中心(加密解密) 》。在这篇文章中
- 先唠叨几句啊,由于公司 * 已经搭好了我就不费那劲琢磨搭建 * 的事了,直接开撸上传lib。下图是我放组件库的地方,本来想一个module拉出一
- 直接进入主题先来看一个栗子,假设现在有一个第三方dllnamespace TestLibrary1{ p
- 解决Spring in action @valid验证不生效按照书上的示例代码来实现但是,添加了验证但是没有生效。Spring提供了校验Ap
- 效果:一个手指实现(所有手势事件)和(部分事件的);A. 所有手势activity_main.xml<TextView android
- 首先是获取特定进程对象,可以使用Process.GetProcesses()方法来获取系统中运行的所有进程,或者使用Process.GetC
- 本文实例为大家分享了Android Studio实现登录界面的具体代码,供大家参考,具体内容如下题目设计一个登录界面。要求:a) 包含用户名