• 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; }
        }
    }

  • 相关阅读:
    win10使用Scoop软件包管理器,支持版本切换
    使用ddns-go实现本地IP或公网IP动态域名解析
    使用Frp实现内网穿透
    Win10开发环境搭建
    Java使用Jabba进行版本管理
    Win10将用户目录Users迁移到其他盘
    【测试开发】十五、接口测试-接口定义-实现接口编辑功能
    【测试开发】十四、接口测试-接口定义功能-前后端-实现新增
    【测试开发】十三、接口测试-接口定义功能-前端-实现动态增删表单
    【测试开发】十二、接口测试-实现接口列表功能-递归查询子节点下的接口
  • 原文地址:https://www.cnblogs.com/baishiying/p/2744478.html
Copyright © 2020-2023  润新知