获取进程信息 1. 如何获取进程信息 (1) 获取本地计算机的所有进程 Process [] myProcess = Process.GetProcesses(); (2) 获取本地计算机上指定名称的进程 Process [] myProcess = Process.GetProcessesByName(“进程名称”); 注意:(a)进程名称不带扩展名。 (b)可以是任何一个可执行文件 例如:Process [] myPrecess = Process.GetProcessesByName(“Notopad++”); (3) 获取远程计算机的所有进程: Process [] myProcess = Process.GetProcesses(remoteMachineName); 例如: Process [] myProcesses = Process.GetProcesses(“192.168.0.1”); (4) 获取远程计算机上指定名称的进程: Process [] myProcess = Process.GetProcessesByName(“远程进程名称”,remoteMachineName);
下面写一个winform程序来举例说明: 要求:(1)用DataGridView显示本地计算机所有进程信息 (2)鼠标单击某一行时,显示该行进程的详细信息
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 WindowsFormsApplication { public partial class ProcessForm : Form { public ProcessForm() { InitializeComponent();
GetAllProcess(); }
private void GetAllProcess() { //创建进程对象获取本地计算机的所有进程 Process[] myProcess = Process.GetProcesses();
this.dataGridView.AutoResizeColumns();//自动调整单元格的宽度来适应其内容 this.dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
List<ProcessModel> proList = new List<ProcessModel>(); foreach (Process ps in myProcess) { ProcessModel pm = new ProcessModel(); pm.ProcessID = ps.Id; pm.ProcessName = ps.ProcessName; pm.PhysicalMemory = string.Format("{0:###,##0.00}MB", ps.WorkingSet64 / 1024.0f / 1024.0f);
try { //有的不提供运行时间 pm.StartTime = string.Format("{0}", ps.StartTime); } catch (Exception) { pm.StartTime = ""; } try { //有些不能获取到 pm.FilesName = ps.MainModule.FileName; } catch (Exception) { pm.FilesName = ""; } proList.Add(pm);
} dataGridView.DataSource = proList; SetDgv(this.dataGridView); } //设置dataGridView的显示和DataSource的属性名字要一致 public void SetDgv(DataGridView dgv) { dgv.AutoGenerateColumns = false;//不自动创建列 dgv.Columns[0].HeaderText = "进程ID"; dgv.Columns[0].DataPropertyName = "ProcessID"; dgv.Columns[1].HeaderText = "进程名称"; dgv.Columns[1].DataPropertyName = "ProcessName"; dgv.Columns[2].HeaderText = "物理内存"; dgv.Columns[2].DataPropertyName = "PhysicalMemory"; dgv.Columns[3].HeaderText = "运行时间"; dgv.Columns[3].DataPropertyName = "StartTime"; dgv.Columns[4].HeaderText = "文件名"; dgv.Columns[4].DataPropertyName = "FilesName"; }
private void ShowProcessInfo(Process p) { StringBuilder sb = new StringBuilder(); sb.AppendFormat("进程ID:{0},进程名称:{1}", p.Id, p.ProcessName); try { sb.AppendLine("进程优先级:" + p.BasePriority + "(优先级类别:" + p.PriorityClass + ")");
sb.AppendLine("文件名:" + p.MainModule.FileName); sb.AppendLine("版本:" + p.MainModule.FileVersionInfo.FileVersion); sb.AppendLine("描述:" + p.MainModule.FileVersionInfo.FileDescription); sb.AppendLine("语言:" + p.MainModule.FileVersionInfo.Language); sb.AppendLine("......................................."); if (p.Modules != null) { //获取跟相应进程相关联的模块 ProcessModuleCollection pmc = p.Modules; sb.AppendLine("调用的模块(.dll)"); for (int i = 0; i < pmc.Count; i++) { sb.AppendLine("模块名:" + pmc[i].ModuleName +"\t" + "版本:" + pmc[i].FileVersionInfo.FileVersion +"\t"+ "描述:" + pmc[i].FileVersionInfo.FileDescription); } } } catch (Exception) { sb.AppendLine("其他信息:无法获取!"); } this.richTextBox.Text = sb.ToString(); }
private void btnRefresh_Click(object sender, EventArgs e) { GetAllProcess(); }
private void dataGridView_CellClick(object sender, DataGridViewCellEventArgs e) { if (this.dataGridView.Rows.Count > 0) { dataGridView.Rows[e.RowIndex].Selected = true; int processID = (int)dataGridView.CurrentRow.Cells[0].Value; //根据ID获取进程 Process pro = Process.GetProcessById(processID); ShowProcessInfo(pro); } }
} }
using System; using System.Collections.Generic; using System.Text;
namespace WindowsFormsApplication { public class ProcessModel { public ProcessModel() { } public int ProcessID { get; set; } public string ProcessName { get; set; } public string PhysicalMemory { get; set; } public string StartTime { get; set; } public string FilesName { get; set; } } }
|
请发表评论