C# Winform 进程信息的获取

获取进程信息
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; }
    }
}

转载于:https://www.cnblogs.com/baishiying/archive/2012/10/29/2744478.html

猜你喜欢

转载自blog.csdn.net/weixin_33994429/article/details/93439941